//****************************************************************************
// $Id: global.js 2474 2007-11-08 22:23:56Z dsterling $
//****************************************************************************
function ReloadOpenerAndClose()
{
    window.opener.location.reload(1);
    window.close();
    return true;
}
//****************************************************************************
function _window_options(width,height)
{
    if (!width) width = 600;
    if (!height) height = 500;

    var win_opts = 'location=true,resizable=yes,scrollbars=yes,toolbar=no,width='+width+',height='+height;
    return win_opts;
}

//****************************************************************************
function MenuHandler(selection, toggle, window_array)
{
    var index = selection.selectedIndex;
    var choice = new String(selection.options[index].value);
    selection.selectedIndex=0;
    return LinkHandler(choice, toggle, window_array)
}

//****************************************************************************
// toggle and window_array are optional
//****************************************************************************
function LinkHandler(choice, toggle, window_array)
{
    if (choice && choice !=  "")
    {
        var parts = choice.split('|');
        /*
            parts index description:
            0 - url
            1 - frame window name
            2 - width
            3 - height
            4 - popup window name
            5 - force new window
        */

        if ((toggle && toggle == 'windows') || parts[5])
        {
            var win_opts = _window_options(parts[2], parts[3]);

            if ( ! parts[4])
            {
                parts[4] = parts[1];
            }
            
            var window_handle = window.open(parts[0], parts[4], win_opts, false);
            if (window_array)
            {
                window_array[window_array.length] = window_handle; 
            }
        }
        else
        {
            if (parts[1])
            {
                window.open(parts[0], parts[1], parts[2], false);
            }
            else
            {
                
                DocLoc(parts[0]);
            }
        }
    }
}

// *****************
function LinkClickHandler()
{

}

//****************************************************************************
// MSIE has the delightful feature of sending the *wrong* HTTP_REFERER header
// the url is loaded via javascript 'document.location' call if the page is inside
// a frameset.
//
// This breaks our return point code. Phooey. So we need to use this hammer
// of putting the current url on the query string of the requested url.
// server side will check referer by looking first for the the 
// 'referer' query param, then the header. Wheeeee.
function DocLoc(url)
{
    // don't do this magic if we are executing javascript.
    if (url.indexOf('javascript:') != 0 && url.indexOf('nmf_mark_rpoint') > -1)
    {
        // ALL our urls (really, every single one) will have other 
        // params already on the query.
        url += ";referer=" + encodeURIComponent(document.location)

    }
    document.location = url;
}

//****************************************************************************
function CloseAppWindows(window_array)
{
    if (window_array.length > 0)
    {
        for (i=window_array.length -1; i >= 0; i--)
        {
            if (!window_array[i].closed)
            {
                window_array[i].CloseAppWindows
                window_array[i].close();
            }
        }
    }
}

//****************************************************************************
function window_toggle(toggle, icon)
{
    if (toggle == 'windows')
    {
        toggle = 'inframe';
        icon.src = "/sitemgr/images/inframe.gif";
        icon.alt = "Open in same window";
        icon.title = "Open in same window"
    }
    else
    {
        toggle = 'windows';
        icon.src = "/sitemgr/images/windows.gif";
        icon.alt = "Open in new window";
        icon.title = "Open in new window"
    }
    return toggle;
}

//****************************************************************************
function ConfirmAction(url, action, object, override_msg)
{
    var msg;
    if (override_msg == null || override_msg == '')
    {
        msg = "Are you sure you want to " + action + " this " + object + " ?"
    }
    else
    {
        msg = override_msg;
    }

    msg = msg.replace(/\\n/, '\n');

    if (confirm(msg))
    {
        DocLoc(url);
    }
}
//****************************************************************************
function AlertMessage(msg_type,custom_msg)
{
    var msg;
    if (msg_type == 'form_error')
    {
        msg = "The select action could not be performed. (Form Error)"; 
    }
    else if (msg_type == 'permission_error')
    {
        msg = "You have not been granted the permission to perform the selected action.";
    }
    else if (msg_type == 'custom')
    {
        msg = custom_msg;
    }

    alert(msg);
}
//****************************************************************************
function NoAction(action, object, message)
{
    var fl = action.charAt(0).toUpperCase();
    var rest = action.substr(1).toLowerCase();
    action = fl + rest;
    alert(action + " of this " + object + " not permitted. Reason:\n" + message);
}
//****************************************************************************
function RefreshSiteMgrNav()
{
    if (top.sitemgr_navbar && top.frames[top.sitemgr_navbar])
    {
        top.frames[top.sitemgr_navbar].location.reload(true);
    }
}
//****************************************************************************
function isFormChanged( form_name )
{
    var rtnVal = false;
    var frm = document.forms[0];


    if (form_name) 
	{
        frm = eval('document.'+form_name);
        //alert( 'isFormChnaged got:(' + frm +')' );
    }
    var ele = frm.elements;

    for ( i=0; i < ele.length; i++ )
    {
        if ( ele[i].type.length > 0 )
        {
            if ( isElementChanged( ele, i ) )
            {
                rtnVal = true;
                break;
            }
        }
    }
    return rtnVal;
}
//****************************************************************************
function isElementChanged( ele, i )
{
    var isEleChanged = false;
    switch ( ele[i].type )
    {
        case "text" :
        if ( ele[i].value != ele[i].defaultValue ) return true;
        break;

        case "textarea" :
        if ( ele[i].value != ele[i].defaultValue ) return true;
        break;

        case "radio" :
        val = "";
        if ( ele[i].checked != ele[i].defaultChecked ) return true;
        break;

        case "select-one" :
        for ( var x =0 ; x <ele[i].length; x++ )
        {
            if ( ele[i].options[ x ].selected != ele[i].options[ x ].defaultSelected )
            return true;
        }
        break;

        case "select-multiple" :
        for ( var x =0 ; x <ele[i].length; x++ )
        {
            if ( ele[i].options[ x ].selected != ele[i].options[ x ].defaultSelected )
            return true;
        }
        break;

        case "checkbox" :
        if ( ele[i].checked != ele[i].defaultChecked ) return true;

        default:
        return false;
        break;
    }
}
//****************************************************************************
function checkForFormChanges( form_name )
{
    if(isFormChanged( form_name ))
    {
        if(confirm('Form Data has changed.\nDo you want to lose changes?'))
        {
            //alert('keep going');
            return false;
        }
        else
        {
            //alert('return to same screen.');
            return true;
        }
    }
}
//****************************************************************************
function launchSpellCheck (form_name, field_name, width, height)
{
    var semi = new RegExp("\;","g");
    var field = eval('document.'+form_name+'.'+field_name+'.value');
    var win_opts = _window_options(width,height);

    var field_data = field.replace(semi,"\;");

    if (document.SpellCheck)
    {
        document.SpellCheck.spc_string_struct.value = field_data;
        document.SpellCheck.spc_return_form.value = form_name;
        document.SpellCheck.spc_return_field.value = field_name;

        window.open('','SpellCheck',win_opts);
        document.SpellCheck.submit();
    }
    else
    {
        alert('The SpellCheck form has not been loaded on this page.');
    }
}
//****************************************************************************
// SubmitMode(form, run mode)
//****************************************************************************
function SubmitMode(submitter,run_mode)
{
    submitter.mode.value=run_mode;
    submitter.submit();
}
//****************************************************************************
// TreeToggle(item)
//****************************************************************************
function TreeToggle(item)
{
    obj=document.getElementById(item);
    try{
        visible=(obj.style.display!="none")
    }catch(er)
    {
        // We want to remove this item from the list stored in the
        // cookie because it has been deleted by the end user. 
        UnSetCookieData(item);
        return false;
    }
    closed_img = getClosedImgSrc();
    open_img = getOpenImgSrc();
    key=document.getElementById("x" + item);
    try{
        if(visible)
        {
            obj.style.display="none";
            key.innerHTML="<img src='" + closed_img + "'  width='16' height='16' hspace='0' vspace='0' border='0'>";
            UnSetCookieData(item);
        }
        else
        {
            obj.style.display="block";
            key.innerHTML="<img src='" + open_img + "'  width='16' height='16' hspace='0' vspace='0' border='0'>";
            SetCookieData(item);
        }
    }catch(er)
    {
        // We want to remove this item from the list stored in the
        // cookie because it has been deleted by the end user. 
        UnSetCookieData(item);
        return false;
    }
}
//****************************************************************************
// ReloadTree()
//****************************************************************************
function ReloadTree(root_section_id)
{

    var top_level_is_expanded = 0;  // Booolean flag to determine whether to 
                                    // toggle the top level section.  The top 
                                    // level should be expanded whenever the 
                                    // user clicks the 'Section Hierarchy' link.

    var cookieName = getCookieName();
    var cookieData = GetCookie(cookieName);
    if(cookieData == null)
    {
        TreeToggle(root_section_id); // If there is no cookie, then it cannot
                                     // have already been expanded.
        return true;
    }
    else
    {
        var id_list = cookieData.split(",");
        while(array_element = id_list.pop())
        {

            if(array_element == null) continue;

            TreeToggle(array_element);

            if (array_element == root_section_id)
            {
                top_level_is_expanded = 1;
            }
        }

        // If the top level has not already been expanded due to the cookie
        // data, then toggle it.
        if(top_level_is_expanded == 0)
        {
            TreeToggle(root_section_id);
        }
    }
}
//****************************************************************************
function UnSetCookieData(item)
{
    var cookieName = getCookieName();
    var cookieData = GetCookie(cookieName);
    var id_list;
    if(cookieData == null)
    {
        id_list = new Array();
    }
    else
    {
        id_list = cookieData.split(",");
    }
    var array_element = '';
    var tmp_array = new Array();
    var i = 0;
    var alen = id_list.length;
    while(array_element = id_list.pop())
    {
        if(array_element == null) continue;
        if(array_element == item) continue;
        tmp_array.push(array_element);
    }
    var ids = tmp_array.join();
    DeleteCookie(cookieName);
    document.cookie = cookieName + "=" + ids + "; PATH = /";
}
//****************************************************************************
function SetCookieData(item)
{
    UnSetCookieData(item);
    var cookieName = getCookieName();
    var cookieData = GetCookie(cookieName);
    var id_list;
    if(cookieData == null)
    {
        id_list = new Array();
    }
    else
    {
        id_list = cookieData.split(",");
    }

    id_list.push(item);
    var ids = id_list.join();

    DeleteCookie(cookieName);

    document.cookie = cookieName + "=" + ids + "; PATH = /";
}
//****************************************************************************
function GetCookie (name)
{
    var arg = name + "=";
    var alen = arg.length;
    var clen = document.cookie.length;
    var i = 0;
    while (i < clen)
    {
        var offset = i + alen;
        if (document.cookie.substring(i, offset) == arg)
        {
            var endstr = document.cookie.indexOf (";", offset);
            if (endstr == -1)
            {
                endstr = document.cookie.length;
            }
            return unescape(document.cookie.substring(offset, endstr));
        }
        i = document.cookie.indexOf(" ", i) + 1;
        if (i == 0) break;
    }
    return null;
}
//****************************************************************************
function DeleteCookie (name) 
{
    var exp = new Date();
    exp.setTime (exp.getTime() - 1);
    var cval = GetCookie (name);
    document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
}
//****************************************************************************
function RefreshTree()
{
    var frame = getTreeFrame();
    if (parent.frames[frame])
    {
        parent.frames[frame].location.reload(true);
    }
    return true;
}
//****************************************************************************
function _dfv_code_name(field,field_name)
{
    var pattern = /[^\w]/;

    var result = field.value.match(pattern);

    if (result != null)
    {
        alert("Invalid "+field_name+" - Must contain only alpha-numerics or underscores. Also must begin with a letter.");
        return false;
    }
    else
    {
        pattern = /^\d/;
        result = field.value.match(pattern);
        if (result != null)
        {
            alert("Invalid "+field_name+" - Must not begin with a number.")
            return false;
        }
    }
    return true;
}
/**************************************************************************************
*
**************************************************************************************/
function radio_button_choose(radio,choice)
{
    var len = radio.length;

    for (var i = 0; i < len; i++)
    {
        if (radio[i].value == choice)
        {
            radio[i].checked = true;
            break;
        }
    }
}
/**************************************************************************************
*
**************************************************************************************/
function radio_button_value(radio)
{
    var len = radio.length;
    var value;
    
    if (len)
    {
        for (var i = 0; i < len; i++)
        {
            if (radio[i].checked == true)
            {
                value = radio[i].value;
                break;
            }
        }
    }
    else if(radio.value)
    {
        value = radio.value;
    }
    
    return (value);
}

//****************************************************************************
function MoveOption_in_order(selection, new_selection)
{
    for(i=0; i<=selection.options.length -1; i++)
    {
        if(selection.options[i].selected)
        {
            var new_opt = new Option(selection.options[i].text,
                                     selection.options[i].value,
                                     false,
                                     false);
            new_selection.options[new_selection.options.length] = new_opt;
        }
    }
    for(i=selection.options.length -1; i>=0;i--)
    {
        if(selection.options[i].selected)
        {
            selection.options[i] = null;
        }
    }
}
//****************************************************************************
function MoveOption(selection, new_selection)
{
    for(i=selection.options.length -1; i >=0; i--)
    {
        if(selection.options[i].selected)
        {
            var new_opt = new Option(selection.options[i].text,
                                     selection.options[i].value,
                                     false,
                                     false);
            new_selection.options[new_selection.options.length] = new_opt;
            selection.options[i] = null;
        }
    }
}
//****************************************************************************
function MoveAllOption(selection, new_selection)
{
    var j=new_selection.options.length;
    for(i=0; i < selection.options.length; i++)
    {
        if(selection.options[i].value == "")
        {
            continue;
        }
        var new_opt = new Option(selection.options[i].text,
                                 selection.options[i].value,
                                 false,
                                 false);
        new_selection.options[j++] = new_opt;
    }
    selection.options.length = 0;
}
//****************************************************************************
function select_list_select_all(select,value)
{
    var len = select.length;

    if (select.type == "select-multiple")
    {
        for (var i = 0; i < len; i++)
        {
            select.options[i].selected = value;
        }
    }                                                                           
}

/**************************************************************************************
*
**************************************************************************************/
function select_list_add(select,field_list,field_id)
{
    var insert_pos = select.length;
    if (field_list != '')
    {
        var fields  = field_list.split(',');
        var id      = field_id.split(',');
        var f_len = fields.length;
        for (var i = 0; i < f_len; i++)
        {
            var new_option = new Option(fields[i],id[i],false,false);
            /*alert(new_option.value);*/
            select.options[insert_pos++] = new_option;
        }
    }
}
/**************************************************************************************
*
**************************************************************************************/
function select_list_add_no_id(select,field_list)
{
    var insert_pos = select.length;

    if (field_list != '')
    {
        var fields = field_list.split(',');
        var f_len = fields.length;
        for (var i = 0; i < f_len; i++)
        {
            var new_option = new Option(fields[i],fields[i],false,false);
            select.options[insert_pos++] = new_option;
        }
    }
}
/**************************************************************************************
*
**************************************************************************************/
function select_list_remove(select,field_list)
{
    var len = select.length;

    var fields = field_list.split(',');
    var f_len = fields.length;

    for (var i = 0; i < f_len; i++)
    {
        for (j = 0; j < len; j++)
        {
            if (select.options[j].value == fields[i])
            {
                select.options[j] = null;
                break;
            }
        }
    }
}

/**************************************************************************************
*
**************************************************************************************/
function select_list_remove_selected(select)
{
    var len = select.length;
    var selected_index = select.selectedIndex;
    
    select[selected_index] = null;
    if (selected_index < len - 1)
    {
        select.selectedIndex = selected_index;
    }
    else
    {
        select.selectedIndex = selected_index -1;
    }
}

/**************************************************************************************
*
**************************************************************************************/
function select_list_move_selected_option_up(select)
{
    var index = select.selectedIndex;
    if (index == -1 || index == 0)
    {
        return;
    }
    this.select_list_option_move(select, -1);
}

/**************************************************************************************
*
**************************************************************************************/
function select_list_move_selected_option_down(select)
{
    var index = select.selectedIndex;
    if (index == -1 || index == select.length - 1)
    {
        return;
    }
    this.select_list_option_move(select, 1);
}

 
/**************************************************************************************
*
**************************************************************************************/
function select_list_choose(select,choice)
{
    var len = select.length;

    for (var i = 0; i < len; i++)
    {

        if (select.options[i].value == choice)
        {
            select.selectedIndex = i;
            break;
        }
    }
}
/**************************************************************************************
*
**************************************************************************************/
function select_list_choose_multiple(select,choice_list)
{
    var len = select.length;

    var choices = choice_list.split(',');
    var c_len = choices.length;

    for (var i = 0; i < c_len; i++)
    {
        for (var j = 0; j < len; j++)
        {
            if (select.options[j].value == choices[i])
            {
                select.options[j].selected = true;
                break;
            }
        }
    }
}
/**************************************************************************************
*
**************************************************************************************/
function select_list_count(select)
{
        var len = select.length;

            var count = select.options.length;

                return (count);
}
/**************************************************************************************
*
**************************************************************************************/
function select_list_selected_count(select)
{
    var len = select.length;
    var count = 0;

    for (var i = 0; i < len; i++)
    {
        if (select.options[i].selected)
        {
            count++;
        }
    }

    return (count);
}
/************************************************************************************
*
************************************************************************************/
function select_list_exists(select,option_text)
{
    var len = select.length;
    var exists = false;

    for (var i = 0; i < len; i++)
    {
        // alert("select.options["+i+"].text = "+select.options[i].text+"\noption_text = "+option_text);
        if (select.options[i].value == option_text)
        {
            exists = true;
            break;
        }
    }

    return (exists);
}

/************************************************************************************
*
************************************************************************************/
function select_list_contains_option(select,option_text)
{
    var len = select.length;
    var exists = false;

    for (var i = 0; i < len; i++)
    {
//        alert("select.options["+i+"].value = "+select.options[i].value+"\noption_text = "+option_text);
        var op_index = select.options[i].value.indexOf(option_text);
        if (op_index >= 0)
        {
            exists = true;
            break;
        }
    }

    return (exists);
}

/************************************************************************************
* Calendar Popup
************************************************************************************/
// Title: Tigra Calendar
// URL: http://www.softcomplex.com/products/tigra_calendar/
// Version: 3.2 (American date format)
// Date: 10/14/2002 (mm/dd/yyyy)
// Note: Permission given to use this script in ANY kind of applications if
//    header lines are left unchanged.
// Note: Script consists of two files: calendar?.js and calendar.html

// if two digit year input dates after this year considered 20 century.
var NUM_CENTYEAR = 30;
// is time input control required by default
var BUL_TIMECOMPONENT = false;
// are year scrolling buttons required by default
var BUL_YEARSCROLL = true;

var calendars = [];
var RE_NUM = /^\-?\d+$/;

function calendar2(obj_target) {

	// assigning methods
	//this.gen_date = cal_gen_date2;
	this.gen_date = cal_gen_date_2digit_year;
	this.gen_time = cal_gen_time2;
	this.gen_tsmp = cal_gen_tsmp2;
	this.prs_date = cal_prs_date2;
	this.prs_time = cal_prs_time2;
	this.prs_tsmp = cal_prs_tsmp2;
	this.popup    = cal_popup2;

	// validate input parameters
	if (!obj_target)
		return cal_error("Error calling the calendar: no target control specified");
	if (obj_target.value == null)
		return cal_error("Error calling the calendar: parameter specified is not valid target control");
	this.target = obj_target;
	this.time_comp = BUL_TIMECOMPONENT;
	this.year_scroll = BUL_YEARSCROLL;
	
	// register in global collections
	this.id = calendars.length;
	calendars[this.id] = this;
}

function cal_popup2 (str_datetime) {
	this.dt_current = this.prs_tsmp(str_datetime ? str_datetime : this.target.value);
	if (!this.dt_current) return;

	var obj_calwindow = window.open(
		'/html/calendar.html?datetime=' + this.dt_current.valueOf()+ '&id=' + this.id,
		'Calendar', 'width=200,height='+(this.time_comp ? 215 : 190)+
		',status=no,resizable=no,top=200,left=200,dependent=yes,alwaysRaised=yes'
	);
	obj_calwindow.opener = window;
	obj_calwindow.focus();
}

function calendar3(obj_target) {

	// assigning methods
	this.gen_date = cal_gen_db_date;
	this.gen_time = cal_gen_time2;
	this.gen_tsmp = cal_gen_tsmp2;
	this.prs_date = cal_prs_date3;
	this.prs_time = cal_prs_time2;
	this.prs_tsmp = cal_prs_tsmp2;
	this.popup    = cal_popup2;

	// validate input parameters
	if (!obj_target)
		return cal_error("Error calling the calendar: no target control specified");
	if (obj_target.value == null)
		return cal_error("Error calling the calendar: parameter specified is not valid target control");
	this.target = obj_target;
	this.time_comp = BUL_TIMECOMPONENT;
	this.year_scroll = BUL_YEARSCROLL;
	
	// register in global collections
	this.id = calendars.length;
	calendars[this.id] = this;
}

// timestamp generating function
function cal_gen_tsmp2 (dt_datetime) {
	return(this.gen_date(dt_datetime) + ' ' + this.gen_time(dt_datetime));
}


// date generating function
function cal_gen_date2 (dt_datetime) {
	return (
		(dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "/"
		+ (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "/"
		+ dt_datetime.getFullYear()
	);
}
// date generating function with a two-digit year
function cal_gen_date_2digit_year (dt_datetime) {
        
        // this '' + is to cast it to a String so that
        // substr could be called against it later
        var year = '' + dt_datetime.getFullYear();
	return (
		(dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "/"
		+ (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate() + "/"
		//+ dt_datetime.getFullYear()
		+ year.substr(2,2)
	);
}
//mysql database compatible date generating function
function cal_gen_db_date (dt_datetime) {
	return (
		dt_datetime.getFullYear() + "-" +
		(dt_datetime.getMonth() < 9 ? '0' : '') + (dt_datetime.getMonth() + 1) + "-"
		+ (dt_datetime.getDate() < 10 ? '0' : '') + dt_datetime.getDate()
	);
}
// time generating function
function cal_gen_time2 (dt_datetime) {
	return (
		(dt_datetime.getHours() < 10 ? '0' : '') + dt_datetime.getHours() + ":"
		+ (dt_datetime.getMinutes() < 10 ? '0' : '') + (dt_datetime.getMinutes()) + ":"
		+ (dt_datetime.getSeconds() < 10 ? '0' : '') + (dt_datetime.getSeconds())
	);
}

// timestamp parsing function
function cal_prs_tsmp2 (str_datetime) {
	// if no parameter specified return current timestamp
	if (!str_datetime)
		return (new Date());

	// if positive integer treat as milliseconds from epoch
	if (RE_NUM.exec(str_datetime))
		return new Date(str_datetime);
		
	// else treat as date in string format
	var arr_datetime = str_datetime.split(' ');
	return this.prs_time(arr_datetime[1], this.prs_date(arr_datetime[0]));
}

// date parsing function
function cal_prs_date2 (str_date) {

	var arr_date = str_date.split('/');

	if (arr_date.length != 3) return alert ("Invalid date format: '" + str_date + "'.\nFormat accepted is mm/dd/yy.");

        var dt_date = new Date();
        dt_date.setDate(1);

        if (str_date != 'mm/dd/yy')
        {
            if (!arr_date[1]) return alert ("Invalid date format: '" + str_date + "'.\nNo day of month value can be found.");
            if (!RE_NUM.exec(arr_date[1])) return alert ("Invalid day of month value: '" + arr_date[1] + "'.\nAllowed values are unsigned integers.");
            if (!arr_date[0]) return alert ("Invalid date format: '" + str_date + "'.\nNo month value can be found.");
            if (!RE_NUM.exec(arr_date[0])) return alert ("Invalid month value: '" + arr_date[0] + "'.\nAllowed values are unsigned integers.");
            if (!arr_date[2]) return alert ("Invalid date format: '" + str_date + "'.\nNo year value can be found.");
            if (!RE_NUM.exec(arr_date[2])) return alert ("Invalid year value: '" + arr_date[2] + "'.\nAllowed values are unsigned integers.");

            if (arr_date[0] < 1 || arr_date[0] > 12) return alert ("Invalid month value: '" + arr_date[0] + "'.\nAllowed range is 01-12.");
            dt_date.setMonth(arr_date[0]-1);
            
            if (arr_date[2] < 100) arr_date[2] = Number(arr_date[2]) + (arr_date[2] < NUM_CENTYEAR ? 2000 : 1900);
            dt_date.setFullYear(arr_date[2]);

            var dt_numdays = new Date(arr_date[2], arr_date[0], 0);
            dt_date.setDate(arr_date[1]);
            if (dt_date.getMonth() != (arr_date[0]-1)) return alert ("Invalid day of month value: '" + arr_date[1] + "'.\nAllowed range is 01-"+dt_numdays.getDate()+".");

        }
        return (dt_date)
}

// mysql db date parsing function
function cal_prs_date3 (str_date) {

	var arr_date = str_date.split('-');

	if (arr_date.length != 3) return alert ("Invalid date format: '" + str_date + "'.\nFormat accepted is yyyy-mm-dd.");

        var dt_date = new Date();
        dt_date.setDate(1);

        if (str_date != 'yyyy-mm-dd')
        {
            if (!arr_date[2]) return alert ("Invalid date format: '" + str_date + "'.\nNo day of month value can be found.");
            if (!RE_NUM.exec(arr_date[2])) return alert ("Invalid day of month value: '" + arr_date[2] + "'.\nAllowed values are unsigned integers.");
            if (!arr_date[1]) return alert ("Invalid date format: '" + str_date + "'.\nNo month value can be found.");
            if (!RE_NUM.exec(arr_date[1])) return alert ("Invalid month value: '" + arr_date[1] + "'.\nAllowed values are unsigned integers.");
            if (!arr_date[0]) return alert ("Invalid date format: '" + str_date + "'.\nNo year value can be found.");
            if (!RE_NUM.exec(arr_date[0])) return alert ("Invalid year value: '" + arr_date[0] + "'.\nAllowed values are unsigned integers.");

            if (arr_date[1] < 1 || arr_date[1] > 12) return alert ("Invalid month value: '" + arr_date[1] + "'.\nAllowed range is 01-12.");
            dt_date.setMonth(arr_date[1]-1);
            
            if (arr_date[0] < 100) arr_date[0] = Number(arr_date[0]) + (arr_date[0] < NUM_CENTYEAR ? 2000 : 1900);
            dt_date.setFullYear(arr_date[0]);

            var dt_numdays = new Date(arr_date[0], arr_date[1], 0);
            dt_date.setDate(arr_date[2]);
            if (dt_date.getMonth() != (arr_date[1]-1)) return alert ("Invalid day of month value: '" + arr_date[2] + "'.\nAllowed range is 01-"+dt_numdays.getDate()+".");

        }
        return (dt_date)
}

// time parsing function
function cal_prs_time2 (str_time, dt_date) {

	if (!dt_date) return null;
	var arr_time = String(str_time ? str_time : '').split(':');

	if (!arr_time[0]) dt_date.setHours(0);
	else if (RE_NUM.exec(arr_time[0])) 
		if (arr_time[0] < 24) dt_date.setHours(arr_time[0]);
		else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed range is 00-23.");
	else return cal_error ("Invalid hours value: '" + arr_time[0] + "'.\nAllowed values are unsigned integers.");
	
	if (!arr_time[1]) dt_date.setMinutes(0);
	else if (RE_NUM.exec(arr_time[1]))
		if (arr_time[1] < 60) dt_date.setMinutes(arr_time[1]);
		else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed range is 00-59.");
	else return cal_error ("Invalid minutes value: '" + arr_time[1] + "'.\nAllowed values are unsigned integers.");

	if (!arr_time[2]) dt_date.setSeconds(0);
	else if (RE_NUM.exec(arr_time[2]))
		if (arr_time[2] < 60) dt_date.setSeconds(arr_time[2]);
		else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed range is 00-59.");
	else return cal_error ("Invalid seconds value: '" + arr_time[2] + "'.\nAllowed values are unsigned integers.");

	dt_date.setMilliseconds(0);
	return dt_date;
}

function cal_error (str_message) {
	alert (str_message);
	return null;
}

//****************************************************************************
//** Search Criteria Functions to Display/Hide list
//****************************************************************************
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
// -->

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_showHideLayers() { //v3.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'block':(v='hide')?'none':v; }
    obj.display=v; }
}
//****************************************************************************
// Pause is used to stop execution of the current script, this is a 
// replacement for sleep, however this function is a cpu hog unlike sleep.
function pause(numberMillis) {
    var now = new Date();
    var exitTime = now.getTime() + numberMillis;
    while (true) {
        now = new Date();
        if (now.getTime() > exitTime)
        return;
    }
}
//*****************************************************************************
// This selects all checkboxes on a given page
// it is currently being used within SiteMgr - Edit Permissions but can be used elsewhere
function SelectAll()
{
  void(d=document);
  void(el=d.getElementsByTagName('INPUT'));
  for(i=0;i<el.length;i++)
    void(el[i].checked=1) 
}
/*****************************************************************************
* Collapsible Frames script
******************************************************************************/

var columntype=""
var defaultsetting=""

function getCurrentSetting(){
if (document.body)
return (document.body.cols)? document.body.cols : document.body.rows
}

function setframevalue(coltype, settingvalue){
if (coltype=="rows")
document.body.rows=settingvalue
else if (coltype=="cols")
document.body.cols=settingvalue
}

function resizeFrame(contractsetting){
if (getCurrentSetting()!=defaultsetting)
setframevalue(columntype, defaultsetting)
else
setframevalue(columntype, contractsetting)
}

function init(){
if (!document.all && !document.getElementById) return
if (document.body!=null){
columntype=(document.body.cols)? "cols" : "rows"
defaultsetting=(document.body.cols)? document.body.cols : document.body.rows
}
else
setTimeout("init()",100)
}

setTimeout("init()",100)

/**********************************************************
ALLOWS PNG ALPHA TRANSPARANCY IN IE
Sleight (c) 2001, Aaron Boodman http://www.youngpup.net
**********************************************************/

if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent)
{
	document.writeln('<style type="text/css">img { visibility:hidden; } </style>');
	window.attachEvent("onload", fnLoadPngs);
}

function fnLoadPngs()
{
	var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
	var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);

	for (var i = document.images.length - 1, img = null; (img = document.images[i]); i--)
	{
		if (itsAllGood && img.src.match(/\.png$/i) != null)
		{
			var src = img.src;
			var div = document.createElement("DIV");
			div.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizing='scale')"
			div.style.width = img.width + "px";
			div.style.height = img.height + "px";
			img.replaceNode(div);
		}
		img.style.visibility = "visible";
	}
}
//****************************************************************************
// Input value mouseover/out script - Used on PubSys Splash
//****************************************************************************
function clearf(object,text)
{
 if (object.value == text)
 {
  object.value = "";
  object.focus();
 }
}

function setf(object,text)
{
 if(object.value == "")
 {
  object.value = text;
  this.focus();
 }
}
//****************************************************************************
function check_change(form)
{
    if (form)
    {
        for (var i=0; i<form.elements.length; i++) 
        {
            if ( isChanged(form.elements[i]))                       
            {            
                return confirm("All changes on this page will be lost."); 
            }
        }
        return true;
    }
    else
    {
        return true;
    }
}

//****************************************************************************
// The following set of functions allows for displaying 'hidden' select menu 
// via css manipulation.
// ***************************
// Main function:       
//      showHiddenSelectMenu
// ***************************
// Related functions:   
//      SHSM_getPosOffset 
//      SHSM_showHide 
//      SHSM_ieCompatTest 
//      SHSM_clearBrowserEdge 
//      SHSM_clickReturnValue
//      SHSM_containsNS6
//      SHSM_dynamicHide
//      SHSM_delayHideMenu
//      SHSM_clearHideMenu
// ***************************
// Global Variables:
//      shsm_disappear_delay      - menu disappear speed onMouseout (in miliseconds)
//      shsm_enable_anchor_link   - Enable or disable the anchor link when clicked on? (1=e, 0=d) 
//      shsm_hide_menu_onclick    - hide menu when user clicks within menu? (1=yes, 0=no)
//      shsm_ie5
//      shsm_ns6
//****************************************************************************
var shsm_disappear_delay=175  
var shsm_enable_anchor_link=0  
var shsm_hide_menu_onclick=1  

var shsm_ie5=document.all
var shsm_ns6=document.getElementById&&!document.all
//****************************************************************************
function SHSM_getPosOffset(what, offsettype)
{
    var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
    var parentEl=what.offsetParent;

    while (parentEl!=null)
    {
        totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
        parentEl=parentEl.offsetParent;
    }

    return totaloffset;
}
//****************************************************************************
function SHSM_showHide(obj, e, visible, hidden)
{
    if (shsm_ie5||shsm_ns6)
        dropmenuobj.style.left=dropmenuobj.style.top=-500

    if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover")
    { 
            obj.visibility=visible;
    }
    else if (e.type=="click")
    {
        obj.visibility=hidden;
    }
}

//****************************************************************************
function SHSM_ieCompatTest()
{
    return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}
//****************************************************************************
function SHSM_clearBrowserEdge(obj, whichedge)
{
    var edgeoffset=0
    if (whichedge=="rightedge")
    {
        var windowedge=shsm_ie5 && !window.opera? SHSM_ieCompatTest().scrollLeft+SHSM_ieCompatTest().clientWidth-15 : window.pageXOffset+window.innerWidth-15
        dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
        if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)
            edgeoffset=dropmenuobj.contentmeasure-obj.offsetWidth
    }
    else
    {
        var topedge=shsm_ie5 && !window.opera? SHSM_ieCompatTest().scrollTop : window.pageYOffset
        var windowedge=shsm_ie5 && !window.opera? SHSM_ieCompatTest().scrollTop+SHSM_ieCompatTest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
        dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
        if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure)
        { //move up?
            edgeoffset=dropmenuobj.contentmeasure+obj.offsetHeight
            if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either?
                edgeoffset=dropmenuobj.y+obj.offsetHeight-topedge
        }
    }
    return edgeoffset
}
//****************************************************************************
function showHiddenSelectMenu(obj, e, dropmenuID)
{
    // Cancel event propagation using either the IE or DOM Level 2 method
    if (window.event) event.cancelBubble=true
    else if (e.stopPropagation) e.stopPropagation()
    if (typeof dropmenuobj!="undefined") //hide previous menu
    {
        dropmenuobj.style.visibility="hidden";
        SHSM_clearHideMenu();
    }
    if (shsm_ie5||shsm_ns6)
    {
        obj.onmouseout=SHSM_delayHideMenu
        dropmenuobj=document.getElementById(dropmenuID)
        if (shsm_hide_menu_onclick) dropmenuobj.onclick=function(){dropmenuobj.style.visibility='hidden'}
        dropmenuobj.onmouseover=SHSM_clearHideMenu
        dropmenuobj.onmouseout=shsm_ie5? function(){ SHSM_dynamicHide(event)} : function(event){ SHSM_dynamicHide(event)}
        SHSM_showHide(dropmenuobj.style, e, "visible", "hidden")
        dropmenuobj.x=SHSM_getPosOffset(obj, "left")
        dropmenuobj.y=SHSM_getPosOffset(obj, "top")
        dropmenuobj.style.left=dropmenuobj.x-SHSM_clearBrowserEdge(obj, "rightedge")+"px"
        dropmenuobj.style.top=dropmenuobj.y-SHSM_clearBrowserEdge(obj, "bottomedge")+obj.offsetHeight+"px"
    }
    return SHSM_clickReturnValue()
}
//****************************************************************************
function SHSM_clickReturnValue()
{
    if ((shsm_ie5||shsm_ns6) && !shsm_enable_anchor_link) return false
    else return true
}
//****************************************************************************
function SHSM_containsNS6(a, b) 
{
    // Have to check b since it is the relatedTarget property and has some
    // problems in Firefox 2 on Mac
    // see bug #2599 - Unpublishing a story does not work for Mac Firefox 2.0
    if (b) {
	while (b.parentNode) {
	    if ((b = b.parentNode) == a) {
		return true;
	    }
	}
    }
    return false;
}
//****************************************************************************
function SHSM_dynamicHide(e)
{
        if (shsm_ie5&&!dropmenuobj.contains(e.toElement))
            SHSM_delayHideMenu()
        else if (shsm_ns6&&e.currentTarget!= e.relatedTarget&& !SHSM_containsNS6(e.currentTarget, e.relatedTarget))
            SHSM_delayHideMenu()
}
//****************************************************************************
function SHSM_delayHideMenu()
{
        shsm_delay_hide=setTimeout("dropmenuobj.style.visibility='hidden';",shsm_disappear_delay)
}
//****************************************************************************
function SHSM_clearHideMenu()
{
    if (typeof shsm_delay_hide!="undefined")
        clearTimeout(shsm_delay_hide)
}
//****************************************************************************
// end functions for displaying 'hidden' drop down menu
//****************************************************************************


//****************************************************************************
// function for validating if the field_info field can be taken off
// of the search results screen
//****************************************************************************
function FI_validate_search_results_field_count()
{

    var count = document.getElementsByName('search_result_field_count')[0];
    var is_search_results = document.getElementsByName('is_search_results')[0];
    if (count.value != '')
    {
        if ((count.value < 1) ||
            (( is_search_results.checked != is_search_results.defaultChecked ) &&
            (is_search_results.defaultChecked == true) &&
            (count.value == 1)))
        {
            alert ("There must be at least one field displayed in search results");
            return false;
        }
    }

    return true;
}

