//------------------------------------------------------------------------------
var RCMT_Calendar_YearStart = 2002;
var RCMT_Calendar_YearCount = 10;
//------------------------------------------------------------------------------
function RCMT_ToolTip(obj)
{
  var offsetxpoint=-60 //Customize x offset of tooltip
  var offsetypoint=20 //Customize y offset of tooltip
  var ie=document.all
  var ns6=document.getElementById && !document.all
  var enabletip=false
  if (ie||ns6)
  {
    var tipobj=document.createElement("div");
    document.body.appendChild(tipobj);
    tipobj.className = "fsi-tooltip-container";
  }

  var ietruebody = function (){
    return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
  }

  function ddrivetip(thetext, thecolor, thewidth){
    if (ns6||ie){
      if (typeof thewidth!="undefined") tipobj.style.width=thewidth+"px"
      if (typeof thecolor!="undefined" && thecolor!="") tipobj.style.backgroundColor=thecolor
      tipobj.innerHTML=thetext
      enabletip=true
      return false
    }
  }

  var positiontip = function(e){
    if (enabletip){
      var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
      var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
      //Find out how close the mouse is to the corner of the window
      var rightedge=ie&&!window.opera? ietruebody().clientWidth-event.clientX-offsetxpoint : window.innerWidth-e.clientX-offsetxpoint-20
      var bottomedge=ie&&!window.opera? ietruebody().clientHeight-event.clientY-offsetypoint : window.innerHeight-e.clientY-offsetypoint-20

      var leftedge=(offsetxpoint<0)? offsetxpoint*(-1) : -1000

      //if the horizontal distance isn't enough to accomodate the width of the context menu
      if (rightedge<tipobj.offsetWidth)
        //move the horizontal position of the menu to the left by it's width
        tipobj.style.left=ie? ietruebody().scrollLeft+event.clientX-tipobj.offsetWidth+"px" : window.pageXOffset+e.clientX-tipobj.offsetWidth+"px"
      else if (curX<leftedge)
        tipobj.style.left="5px"
      else
        //position the horizontal position of the menu where the mouse is positioned
        tipobj.style.left=curX+offsetxpoint+"px"

      //same concept with the vertical position
      if (bottomedge<tipobj.offsetHeight)
        tipobj.style.top=ie? ietruebody().scrollTop+event.clientY-tipobj.offsetHeight-offsetypoint+"px" : window.pageYOffset+e.clientY-tipobj.offsetHeight-offsetypoint+"px"
      else
        tipobj.style.top=curY+offsetypoint+"px"
      tipobj.style.visibility="visible"
    }
  }

  var hideddrivetip = function (){
    if (ns6||ie){
      enabletip=false;
      tipobj.style.visibility="hidden";
      tipobj.style.left="-1000px" ;
      tipobj.style.backgroundColor='';
      tipobj.style.width='';
    }
  }

  document.onmousemove=positiontip;

  try {
    var tt = RCMT_GetElementsByAttribute(obj,"*", "class", "fsi-tooltip")[0]
          || RCMT_GetElementsByAttribute(obj,"*", "className", "fsi-tooltip")[0];
    obj.style.cursor = "pointer";
    var text = tt.innerHTML;
    ddrivetip(text);
    obj.onmouseout = hideddrivetip;
  }catch(e){};
}

//------------------------------------------------------------------------------
function RCMT_Calendar(the_form, textfield, position, right_align, min_date, max_date, event_onchange)
{
  var calendar = function(){
    return {
      init: function() {

        var config = { iframe:true, pages:2 };
        var element   = "E_" + textfield;
        var container = "C_" + textfield;
        var listener  = "L_" + textfield;
        var xy;

        var divC = document.createElement("span");
        divC.id = container;
        divC.className = "fsi-calendar";
        document.body.appendChild(divC);

        var inputObject= RCMT_GetInputByName(the_form, textfield);
        inputObject.id = textfield;

        var imgObject = RCMT_GetNextSiblingByTag(inputObject, "IMG");
        imgObject.id = listener;

        if (min_date)
          config['mindate'] = min_date;
        else
          config['mindate'] = "01-JAN-" + RCMT_Calendar_YearStart;

        if (max_date)
          config['maxdate'] = max_date;
        else
          config['maxdate'] = "31-DEC-" + (RCMT_Calendar_YearStart + RCMT_Calendar_YearCount);

        var cal = new YAHOO.widget.CalendarGroup(element, container, config);
        cal.rcm_over_cal = false;

        cal.selectEvent.subscribe(
            function() {
              var calDate = this.getSelectedDates()[0];
              var mm = '' + (calDate.getMonth() + 1);
                  mm = (mm.length == 1)? ('0' + mm):mm;
              var dd = '' + calDate.getDate();
                  dd = (dd.length == 1)? ('0' + dd):dd;
              var yyyy = String(calDate.getFullYear()).substring(2, 4);
              var mmm = '';

              if (mm == 1)  mmm = "Jan";
              if (mm == 2)  mmm = "Feb";
              if (mm == 3)  mmm = "Mar";
              if (mm == 4)  mmm = "Apr";
              if (mm == 5)  mmm = "May";
              if (mm == 6)  mmm = "Jun";
              if (mm == 7)  mmm = "Jul";
              if (mm == 8)  mmm = "Aug";
              if (mm == 9)  mmm = "Sep";
              if (mm == 10) mmm = "Oct";
              if (mm == 11) mmm = "Nov";
              if (mm == 12) mmm = "Dec";

              YAHOO.util.Dom.get(textfield).value = dd + '-' + mmm + '-' + yyyy;
              cal.rcm_over_cal=false;
              this.hide();
              if (event_onchange) event_onchange();
            }
          , cal, true
        );


        YAHOO.util.Event.addListener(imgObject, "click",
          function(){
            var date = YAHOO.util.Dom.get(inputObject).value;
            if (date) {
                var mm = 0;
                var mmm = date.substring(3,6);
                if (mmm == "Jan") mm = 1   ;
                if (mmm == "Feb") mm = 2   ;
                if (mmm == "Mar") mm = 3   ;
                if (mmm == "Apr") mm = 4   ;
                if (mmm == "May") mm = 5   ;
                if (mmm == "Jun") mm = 6   ;
                if (mmm == "Jul") mm = 7   ;
                if (mmm == "Aug") mm = 8   ;
                if (mmm == "Sep") mm = 9   ;
                if (mmm == "Oct") mm = 10  ;
                if (mmm == "Nov") mm = 11  ;
                if (mmm == "Dec") mm = 12  ;

                var date = mm + '/' + date.substring(0,2) + '/' + "20"+date.substring(7,9);
                var d = new Date(date);

                if (d.toString().indexOf('Invalid') != 0 && d.toString().indexOf('NaN') != 0)
                {
                  cal.setYear(d.getFullYear());
                  cal.setMonth(d.getMonth());
                  cal.cfg.setProperty('selected', date);
                  cal.cfg.setProperty('pagedate', d, true);

                }else{ // set to current date if invalid
                  cal.clear();
                }
            }

            //YAHOO.util.Dom.setStyle(container, 'display', 'block');
            if ( xy == null )
            {
              cal.show();
              var height_container = YAHOO.util.Dom.get(divC).offsetHeight;
              var height_textfield = YAHOO.util.Dom.get(inputObject).offsetHeight;
              var width_container = YAHOO.util.Dom.get(divC).offsetWidth;
              var width_textfield = YAHOO.util.Dom.get(inputObject).offsetWidth;

              xy = YAHOO.util.Dom.getXY(inputObject);

              switch (position)
              {
                case 1: // upper left
                  xy[1] = xy[1] - height_container - 2;
                  break;
                default:
                  xy[1] = xy[1] + height_textfield + 2;
              }


              if (right_align)
              {
                xy[0] = xy[0] - width_container + width_textfield;
              }

              YAHOO.util.Dom.setXY(divC, xy);
            }
            cal.render();
            cal.show();
          }
        );


        var el = document.createElement("div");


        var sl = document.createElement("select");
        sl.style.width = "60px";

        var mn = document.createElement("select");
        mn.style.width = "60px";

        var sp = document.createElement("span");
        sp.appendChild(document.createTextNode("Today"));
        YAHOO.util.Dom.setStyle(sp, "text-decoration", "underline");
        YAHOO.util.Dom.setStyle(sp, "padding-left", "10px");
        //YAHOO.util.Dom.setStyle(sp, "vertical-align", "top");
        YAHOO.util.Dom.setStyle(sp, "cursor", "pointer");


        var over_select = false;

        var startDate = RCMT_Calendar_YearStart;
        for (var i = 0; i <= RCMT_Calendar_YearCount; i++)
        {
          var op = document.createElement("option");
          op.appendChild(document.createTextNode(startDate+i));
          sl.appendChild(op);
        }

        YAHOO.util.Event.addListener(sp, "click",
          function(){
            var calDate = new Date();
            var mm = '' + (calDate.getMonth() + 1);
                mm = (mm.length == 1)? ('0' + mm):mm;
            var dd = '' + calDate.getDate();
                dd = (dd.length == 1)? ('0' + dd):dd;
            var yyyy = calDate.getFullYear();
            //YAHOO.util.Dom.get(textfield).value = mm + '/' + dd + '/' + yyyy;

            cal.setYear(yyyy);
            cal.setMonth(mm-1);
            //cal.cfg.setProperty('selected', mm + '/' + dd + '/' + yyyy);
            //cal.cfg.setProperty('pagedate', calDate, true);
            cal.render();
          }
        );

        YAHOO.util.Event.addListener(sl, "change"
         , function(){
              cal.setYear(sl.options[sl.selectedIndex].text);
              cal.render();
           }
        );


        var syncyear = function(type) {

          var yyyy = cal.pages[0].getDateByCellId(element+"_0_cell17").getFullYear();
          for (var i = 0; i < sl.length; i++ )
          {
            if ( parseInt(sl.options[i].text) == yyyy)
              sl.selectedIndex = i;
          }

        }
        cal.renderEvent.subscribe(syncyear);

        var mo = new Object();
        mo[1 ] = "Jan";
        mo[2 ] = "Feb";
        mo[3 ] = "Mar";
        mo[4 ] = "Apr";
        mo[5 ] = "May";
        mo[6 ] = "Jun";
        mo[7 ] = "Jul";
        mo[8 ] = "Aug";
        mo[9 ] = "Sep";
        mo[10] = "Oct";
        mo[11] = "Nov";
        mo[12] = "Dec";



        for (var i = 1; i <= 12; i++)
        {
          var op = document.createElement("option");
          op.appendChild(document.createTextNode(mo[i]));
          mn.appendChild(op);
        }
        YAHOO.util.Event.addListener(mn, "change"
          , function(){
              cal.setMonth(mn.selectedIndex);
              cal.render();
            }
        );

        el.appendChild(sl);
        el.appendChild(mn);
        el.appendChild(sp);

        var syncmonth = function(type) {
          var month = cal.pages[0].getDateByCellId(element+"_0_cell17").getMonth();
          mn.selectedIndex = month;
        }
        cal.renderEvent.subscribe(syncmonth);



        YAHOO.util.Event.addListener(container, 'mouseover', function(){cal.rcm_over_cal=true ; } );
        YAHOO.util.Event.addListener(container, 'mouseout' , function(){cal.rcm_over_cal=false; } );
        YAHOO.util.Event.addListener(textfield, 'mouseover', function(){cal.rcm_over_cal=true ; } );
        YAHOO.util.Event.addListener(textfield, 'mouseout' , function(){cal.rcm_over_cal=false; } );
        YAHOO.util.Event.addListener(listener , 'mouseover', function(){cal.rcm_over_cal=true ; } );
        YAHOO.util.Event.addListener(listener , 'mouseout' , function(){cal.rcm_over_cal=false; } );
        YAHOO.util.Event.addListener(sl , 'click', function(){cal.rcm_over_cal=true ; } );
        YAHOO.util.Event.addListener(mn , 'click', function(){cal.rcm_over_cal=true ; } );

        YAHOO.util.Event.addListener(window.document, "click",
          function(){
            if (!cal.rcm_over_cal)
              cal.hide();
          }
        );

        el.className = "rcm-calendar-year";

        divC.appendChild(el);
        //YAHOO.util.Dom.get(container).insertBefore(el,YAHOO.util.Dom.get(container).firstChild) ;
        cal.render();
        //alert(divC.innerHTML);
      }
    };
  }();
  YAHOO.util.Event.addListener(window, "load", calendar.init);
}
//------------------------------------------------------------------------------
function RCMT_GetNextSiblingByTag(e, tag)
{
  var x=e.nextSibling;
  try {
    while (x.nodeName != tag)
    {
      x=x.nextSibling;
    }
  }catch(e){return e}
  return x;
}
//------------------------------------------------------------------------------
function RCMT_GetElementById(e)
{
  if(typeof(e)=='string') {
    if(document.getElementById) e=document.getElementById(e);
    else if(document.all) e=document.all[e];
    else e=null;
  }
  return e;
}
//------------------------------------------------------------------------------
function RCMT_GetInputByName(the_form, input_name)
{
  var formObject = document.forms[the_form];
  var inputObject;
  for (var i=0;i<formObject.length;i++)
  {
    if (formObject.elements[i].name == input_name)
    {
      inputObject = formObject.elements[i];
      break;
    }
  }
  return inputObject;
}
//------------------------------------------------------------------------------
function RCMT_GetElementById_Parent(e)
{
  if(typeof(e)=='string') {
    if(document.getElementById) e=window.opener.document.getElementById(e);
    else if(document.all) e=window.opener.document.all[e];
    else e=null;
  }
  return e;
}
//------------------------------------------------------------------------------
function RCMT_GetTextById(e)
{
  return RCMT_GetElementById(e).innerText || RCMT_GetElementById(e).textContent;
}
//------------------------------------------------------------------------------
// Removes leading whitespaces
function RCMT_LTrim(value) {

  var re = /\s*((\S+\s*)*)/;
  return value.replace(re, "$1");

}

// Removes ending whitespaces
function RCMT_RTrim(value) {

  var re = /((\s*\S+)*)\s*/;
  return value.replace(re, "$1");

}

// Removes leading and ending whitespaces
function RCMT_trim( value ) {
  return RCMT_LTrim(RCMT_RTrim(value));
}
//------------------------------------------------------------------------------
function RCMT_IsDateValid(msg, textfield)
{
  var date = YAHOO.util.Dom.get(textfield).value;
  if (date) {
      var d = new Date(date);
      if (d.toString().indexOf('Invalid') != 0 && d.toString().indexOf('NaN') != 0)
      {
      }else{
        alert("Invalid Date!\nReset back to previous value.");
      }
  }
}
//------------------------------------------------------------------------------
function RCMT_AddListener(obj, str_event, func)
{
  YAHOO.util.Event.addListener(obj, str_event, func);
}
//------------------------------------------------------------------------------
function RCMT_GetElementsByAttribute(oElm, strTagName, strAttributeName, strAttributeValue)
{
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	var oAttributeValue = (typeof strAttributeValue != "undefined")? new RegExp("(^|\s)" + strAttributeValue + "(\s|$)") : null;
	var oCurrent;
	var oAttribute;

	for(var i=0; i<arrElements.length; i++){
		oCurrent = arrElements[i];
		oAttribute = oCurrent.getAttribute && oCurrent.getAttribute(strAttributeName);
		if(typeof oAttribute == "string" && oAttribute.length > 0){
			if(typeof strAttributeValue == "undefined" || (oAttributeValue && oAttributeValue.test(oAttribute))){
				arrReturnElements.push(oCurrent);
			}
		}
	}
	return arrReturnElements;
}

//------------------------------------------------------------------------------
function RCMT_GenUuid()
{
  return UUID.generate ("v4");
}
//------------------------------------------------------------------------------
// Functions for Form elements
//------------------------------------------------------------------------------
function RCMT_RadioClear(the_radio)
{
  var i;
  for ( i=0; i <the_radio.length; i++ )
  {
    the_radio[i].checked = false;
  }
}
//------------------------------------------------------------------------------
function RCMT_CheckboxHasChecked(divId)
{
  var div = RCMT_GetElementById(divId);
  var checkboxes = RCMT_GetElementsByAttribute(div, "input", "type", "checkbox");

  for ( i in checkboxes )
  {
    if (checkboxes[i].checked == true) return true;
  }
  return false;
}
//------------------------------------------------------------------------------
function RCMT_CheckboxCheckAll(divId)
{
  var div = RCMT_GetElementById(divId);
  var checkboxes = RCMT_GetElementsByAttribute(div, "input", "type", "checkbox");
  for ( i in checkboxes )
  {
    checkboxes[i].checked = true;
  }
}
//------------------------------------------------------------------------------
function RCMT_CheckboxUnCheckAll(divId)
{
  var div = RCMT_GetElementById(divId);
  var checkboxes = RCMT_GetElementsByAttribute(div, "input", "type", "checkbox");
  for ( i in checkboxes )
  {
    checkboxes[i].checked = false;
  }
}
//------------------------------------------------------------------------------
function RCMT_InputDisable(the_form, input_name)
{
  RCMT_GetInputByName(the_form, input_name).disabled = true;
}
//------------------------------------------------------------------------------
function RCMT_InputEnsable(the_form, input_name)
{
  RCMT_GetInputByName(the_form, input_name).disabled = false;
}
//------------------------------------------------------------------------------
function RCMT_InputDisableToggle(the_form, input_name)
{
  var input_id = RCMT_GetInputByName(the_form, input_name);
  input_id.disabled = !input_id.disabled;
}
//------------------------------------------------------------------------------
function RCMT_GetScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}
//------------------------------------------------------------------------------
// JQuery::
// AjaxPanel
//------------------------------------------------------------------------------
function RCM_AjaxPanelHide(p)
{
  var picked = $(p);
  var panel = $(picked.parents("[rcm_ajax_panel]:first"));

  panel.jqmHide();
}
//-----------------------------------------------------------------------------
function RCM_AjaxPanelInit(t)
{
  var trigger = $(t);

  if (trigger.attr("rcm_ajax_called") == 1) return;
  trigger.attr("rcm_ajax_called", 1);

  var panel;
  var loading = trigger.next("img:first");
  loading.css("visibility", "visible");
  if (trigger.attr("rcm_ajax_blocking"))
    $(trigger.attr("rcm_ajax_blocking")).block('<h4 style="font-size:12pt"><img src="img/icon_ajax_loading.gif" />&nbsp;Processing...</h4>', { border: '2px solid #859EC7' });

  $.ajax({
    url:trigger.attr("rcm_ajax_panel_url")
    ,type: "GET"
    ,cache:false
    ,success: function(data){
      //$("body").after(data);
      //panel = $("body").next();
      if (trigger.attr("rcm_ajax_blocking")) $(trigger.attr("rcm_ajax_blocking")).unblock();
      popup_container = trigger.attr("rcm_ajax_popup_container");
      panel = $(data);
      if (popup_container)
      {
        $(popup_container).empty().append(panel);
      }else{
        $("body").append(panel);
      }

      panel.attr("rcm_ajax_panel_reciever"     ,trigger.attr("rcm_ajax_panel_reciever"     ));
      panel.attr("rcm_ajax_panel_anchor"       ,trigger.attr("rcm_ajax_panel_anchor"       ));
      panel.attr("rcm_ajax_panel_onrecieved"   ,trigger.attr("rcm_ajax_panel_onrecieved"   ));
      panel.attr("rcm_ajax_panel_position"     ,trigger.attr("rcm_ajax_panel_position"     ));
      panel.attr("rcm_ajax_panel_multi_select" ,trigger.attr("rcm_ajax_panel_multi_select" ));
      panel.attr("rcm_ajax_panel_right_align"  ,trigger.attr("rcm_ajax_panel_right_align"  ));
      panel.attr("rcm_ajax_reload"             ,trigger.attr("rcm_ajax_reload"             ));

      panel.attr("rcm_ajax_panel"  ,"1"  );
      panel
        .find("input[type=text]")
        .bind("focus", function(){
          this.select();
          this.focus();
          if (panel.attr("rcm_ajax_reload") == "yes")
          {
            if ($(this).val() != "")
            {
              $(this).val("");
              $(this).parents("form:first").submit();
            }
          }
         })
      ;

      var i_loading = panel.find(".rcm-ajax-loading");

      panel
        .jqm({
           trigger:trigger
           ,modal :true
           ,onShow:function(hash){
              if ($.browser.msie && $.browser.version == '6.0')
              {
                hash.w.css(RCM_PositionPanel(t,panel)).show();
              }else{
                //panel.css("position","absolute"); // mozilla cursor disappear fix
                hash.w.css(RCM_PositionPanel(t,panel)).show();
              }

              hash.w
               .find("input[type=text]")
               .parents(".fsi-panel-search")
               .parents("div:first")
               .hide()
               .slideDown('fast')
              ;
           }
         })
        .find("input[name=pg_ajax]").val(1).end()
      ;
      if (trigger.attr("rcm_ajax_panel_not_handle_form") != "1")
      {
       panel
        .find("form")
        .ajaxForm({
           target: panel.find(".fsi-panel-list-container")
           ,beforeSubmit:function(){
              //panel.block('<span style="font-size:80%"><img src="img/icon_ajax_loading.gif" />&nbsp;Processing...</span>', { border: '1px solid #7e7f81' });
              i_loading.css("visibility", "visible");
            }
           ,success:function(){
              //panel.unblock();
              i_loading.css("visibility", "hidden" );
            }
         }).end()
       ;
      }
      panel
      //.jqResize(panel.find('.jqResize'))
        .jqDrag(panel.find('.jqDrag'))
        .jqmShow()
        //.draggable({
        //  helper:'original'
        //  ,handle:panel.find('.jqDrag')
        //  ,stop:function(e, ui){
        //    if ($.browser.msie && $.browser.version == '6.0')
        //    {
        //    }else{
        //      panel.css("position","fixed");
        //    }
        //  }
        //})

      ;

      loading.css("visibility", "hidden");

    }
  });
}

//-----------------------------------------------------------------------------
function RCM_PositionPanel(trigger,panel)
{
  if (!trigger.anchor)
  {
    try{
      trigger.pos = panel.attr("rcm_ajax_panel_position").toLowerCase();
    }catch(e){trigger.pos = "0z";}

    if (!panel.attr("rcm_ajax_panel_anchor"))
      trigger.anchor = $(panel.attr("rcm_ajax_panel_reciever"));
    else
      trigger.anchor = $(panel.attr("rcm_ajax_panel_anchor"));
  }

  try{
    trigger.right_align = panel.attr("rcm_ajax_panel_right_align").toLowerCase();
  }catch(e){trigger.right_align = "no";}


  if ($.browser.msie && $.browser.version == '6.0')
  {
    return RCM_PositionIe6(trigger.anchor ,panel ,trigger.pos, trigger.right_align );
  }else{
    return RCM_Position(trigger.anchor ,panel ,trigger.pos, trigger.right_align );
  }
}
//-----------------------------------------------------------------------------
function RCM_PositionIe6(anchor, panel, pos, right_align)
{
  var at = anchor.offset().top ;//- $(document).scrollTop();
  var al = anchor.offset().left ;//- $(document).scrollLeft();
  var ah = anchor.height();
  var aw = anchor.width();
  var ph = panel.height();
  var pw = panel.width();

  var lmin = $(window).scrollLeft();
  var lmax = lmin + document.documentElement.clientWidth;//$(window).width();
  var tmin = $(window).scrollTop();
  var tmax = tmin + document.documentElement.clientHeight;//$(window).height();

  var ra = 0; // right align
  if (right_align == 'yes') ra = aw - pw;


  var t = 0;
  var l = 0;
  var x = 0;
  var y = 0;

  switch (pos)
  {
    case 'bottom':t = at + ah + 8;l = al + ra         ; return {position:"fixed", top:t, left:l};
    case 'top'   :t = at - ph - 2;l = al + ra         ; return {position:"fixed", top:t, left:l};
    case 'left'  :t = at         ;l = al + ra - pw - 2; return {position:"fixed", top:t, left:l};
    case 'right' :t = at         ;l = al + ra + aw + 8; return {position:"fixed", top:t, left:l};
    case 'center':t = (tmax-tmin-ph)/2; l = (lmax-lmin - pw)/2; return {position:"absolute", top:t, left:l};
  }

  // bottom
  var b_ok = 1;
  var b_t = at + ah + 8; if ( b_t < tmin || b_t > tmax ) b_ok -= 1;
  var b_l = al + ra    ; if ( b_l < lmin || b_l > lmax ) b_ok -= 1;
  var b_y = b_t + ph   ; if ( b_y < tmin || b_y > tmax ) b_ok -= 1;
  var b_x = b_l + pw   ; if ( b_x < lmin || b_x > lmax ) b_ok -= 1;
  if (b_ok == 1) return {position:"absolute", top:b_t, left:b_l};

  // top
  var t_ok = 1;
  var t_t = at - ph - 2; if ( t_t < tmin || t_t > tmax ) t_ok -= 1;
  var t_l = al + ra    ; if ( t_l < lmin || t_l > lmax ) t_ok -= 1;
  var t_y = t_t + ph   ; if ( t_y < tmin || t_y > tmax ) t_ok -= 1;
  var t_x = t_l + pw   ; if ( t_x < lmin || t_x > lmax ) t_ok -= 1;
  if (t_ok == 1) return {position:"absolute", top:t_t, left:t_l};

  // left
  var l_ok = 1;
  var l_t = at         ; if ( l_t < tmin || l_t > tmax ) l_ok -= 1;
  var l_l = al - pw - 2; if ( l_l < lmin || l_l > lmax ) l_ok -= 1;
  var l_y = l_t + ph   ; if ( l_y < tmin || l_y > tmax ) l_ok -= 1;
  var l_x = l_l + pw   ; if ( l_x < lmin || l_x > lmax ) l_ok -= 1;
  if (l_ok == 1) return {position:"absolute", top:l_t, left:l_l};

  // right
  var r_ok = 1;
  var r_t = at         ; if ( r_t < tmin || r_t > tmax ) r_ok -= 1;
  var r_l = al + aw + 8; if ( r_l < lmin || r_l > lmax ) r_ok -= 1;
  var r_y = r_t + ph   ; if ( r_y < tmin || r_y > tmax ) r_ok -= 1;
  var r_x = r_l + pw   ; if ( r_x < lmin || r_x > lmax ) r_ok -= 1;
  if (r_ok == 1) return {position:"absolute", top:r_t, left:r_l};

  return {position:"absolute", top:tmin, left:lmin};
}
//-----------------------------------------------------------------------------
function RCM_Position(anchor, panel, pos, right_align)
{
  var at = anchor.offset().top ;//- $(document).scrollTop();
  var al = anchor.offset().left ;//- $(document).scrollLeft();
  var ah = anchor.height();
  var aw = anchor.width();
  var ph = panel.height();
  var pw = panel.width();

  var lmin = $(window).scrollLeft();
  var lmax = lmin + document.documentElement.clientWidth;//$(window).width();
  var tmin = $(window).scrollTop();
  var tmax = tmin + document.documentElement.clientHeight;//$(window).height();

  var ra = 0; // right align
  if (right_align == 'yes') ra = aw - pw;

  var t = 0;
  var l = 0;
  var x = 0;
  var y = 0;

  switch (pos)
  {
    case 'bottom':t = at + ah + 8;l = al + ra         ; return {position:"fixed", top:t-tmin, left:l-lmin};
    case 'top'   :t = at - ph - 2;l = al + ra         ; return {position:"fixed", top:t-tmin, left:l-lmin};
    case 'left'  :t = at         ;l = al + ra - pw - 2; return {position:"fixed", top:t-tmin, left:l-lmin};
    case 'right' :t = at         ;l = al + ra + aw + 8; return {position:"fixed", top:t-tmin, left:l-lmin};
    case 'center':t = (tmax-tmin-ph)/2 ; l = (lmax-lmin - pw)/2; return {position:"fixed", top:t, left:l};
  }

  // bottom
  var b_ok = 1;
  var b_t = at + ah + 8; if ( b_t < tmin || b_t > tmax ) b_ok -= 1;
  var b_l = al + ra    ; if ( b_l < lmin || b_l > lmax ) b_ok -= 1;
  var b_y = b_t + ph   ; if ( b_y < tmin || b_y > tmax ) b_ok -= 1;
  var b_x = b_l + pw   ; if ( b_x < lmin || b_x > lmax ) b_ok -= 1;
  if (b_ok == 1) return {position:"fixed", top:b_t-tmin, left:b_l-lmin};

  // top
  var t_ok = 1;
  var t_t = at - ph - 2; if ( t_t < tmin || t_t > tmax ) t_ok -= 1;
  var t_l = al + ra    ; if ( t_l < lmin || t_l > lmax ) t_ok -= 1;
  var t_y = t_t + ph   ; if ( t_y < tmin || t_y > tmax ) t_ok -= 1;
  var t_x = t_l + pw   ; if ( t_x < lmin || t_x > lmax ) t_ok -= 1;
  if (t_ok == 1) return {position:"fixed", top:t_t-tmin, left:t_l-lmin};

  // left
  var l_ok = 1;
  var l_t = at         ; if ( l_t < tmin || l_t > tmax ) l_ok -= 1;
  var l_l = al - pw - 2; if ( l_l < lmin || l_l > lmax ) l_ok -= 1;
  var l_y = l_t + ph   ; if ( l_y < tmin || l_y > tmax ) l_ok -= 1;
  var l_x = l_l + pw   ; if ( l_x < lmin || l_x > lmax ) l_ok -= 1;
  if (l_ok == 1) return {position:"fixed", top:l_t-tmin, left:l_l-lmin};

  // right
  var r_ok = 1;
  var r_t = at         ; if ( r_t < tmin || r_t > tmax ) r_ok -= 1;
  var r_l = al + aw + 8; if ( r_l < lmin || r_l > lmax ) r_ok -= 1;
  var r_y = r_t + ph   ; if ( r_y < tmin || r_y > tmax ) r_ok -= 1;
  var r_x = r_l + pw   ; if ( r_x < lmin || r_x > lmax ) r_ok -= 1;
  if (r_ok == 1) return {position:"fixed", top:r_t-tmin, left:r_l-lmin};

  return {position:"fixed", top:tmin, left:lmin};
}
//-----------------------------------------------------------------------------
function RCM_AnimateFlyDrop(p)
{
  var picked = $(p);
  var panel = $(picked.parents("[rcm_ajax_panel]:first"));
  var multi = panel.attr("rcm_ajax_panel_multi_select").toLowerCase();

  var reciever = $(picked.parents("[rcm_ajax_panel_reciever]:first").attr("rcm_ajax_panel_reciever"));
  var onrecieved = picked.parents("[rcm_ajax_panel_onrecieved]:first").attr("rcm_ajax_panel_onrecieved");

  if (!reciever) reciever = $(picked.attr("rcm_ajax_panel_reciever"));  // single link
  if (!onrecieved) onrecieved = picked.attr("rcm_ajax_panel_onrecieved"); // single link

  var row = Object();
  var i= 0;
  $(picked).parents("tr:first").children("td").each(function(){
    row[i++] = $(this).text();
  });
  if (0 == i) row[0] = $(picked).text();

  //RCM_AnimateBackgroundBlink(reciever);
  var lt = reciever.offset().left + 2;
  var tp = reciever.offset().top + 2;

  var l = picked.offset().left ;//+ ( $.browser.mozilla?($(window).scrollLeft()):0 );
  var t = picked.offset().top  ;//+ ( $.browser.mozilla?($(window).scrollTop() ):0 );
  var clone = picked.clone();

  clone
    .insertAfter(panel)
    .css({
      position:"absolute"
      ,whiteSpace:"nowrap"
      ,textDecoration:"none"
      ,fontWeight:"bold"
      ,zIndex:"3010"
      ,color:"#DE0029"
      ,left:l
      ,top:t
     })
    .animate({
      left:lt
      ,top:tp
    }, 500, "swing", function(){
        if (!onrecieved)
        {
          reciever.val(row[0]);
        }else{
          eval(onrecieved+"(row)");
        }
        $(this).remove();
        if (multi != "yes") panel.jqmHide();

      }
    )
  ;

}
//-----------------------------------------------------------------------------
function RCM_AnimateBackgroundBlink(reciever)
{
  var bc = reciever.css("background-color");
  var cl = reciever.css("color");
  reciever
    .css({
      backgroundColor:"#00F"
      ,color:"#FFF"
      ,opacity:0
    })
    .animate(
      {opacity: 0.5}
      ,function() {
        $(this)
        .animate(
          {opacity:1}
          ,function() {
            $(this).css({
              backgroundColor:bc
              ,color:cl
            });
          }
        )
      }
    );
};
//-----------------------------------------------------------------------------
function RCMT_InputFromSelect( input_class, select_id, fn )
{
  $(document).ready(function(){
    $("."+input_class).mouseover(function(){
      $("."+input_class).css('visibility', 'visible');

      var i = $(this);
      $(i).css('visibility', 'hidden');
      var y = i.offset().top;
      var x = i.offset().left;

      $("#"+select_id)
        .val(i.val())
        .css({top:y, left:x}).show()
        .unbind( "change" )
        .change(function(){
          $(this).css('display', 'none');
          i.val($(this).val()).css('visibility', 'visible');
          i.attr("title", $(this).find("option:selected").text());
          if (fn) fn(i);
        })
        .unbind( "blur" )
        .blur(function(){
          $(this).change();
        })
        .focus()
        ;
    })
    .keydown(function(){
      $(this).click();
    })
    .focus(function(){
      $(this).click();
    });
  });
}
//-----------------------------------------------------------------------------
function RCMT_SelectFill( befiller, select_id )
{
  if ( $(befiller).attr("filled") == "1") return ;
  var v = $(befiller).val();
  $(befiller).attr("filled", "1");
  var filler = $('#'+select_id).html();
  $(befiller).html( filler ).val(v);
}
//-----------------------------------------------------------------------------
function RCMT_SelectParentChild(parent_class, ajax_url)
{
  $(document).ready(function(){
    $("." + parent_class).change(function(){
      var p = $(this);
      var child = p.attr("child");
      var ajax_url_child = ajax_url + p.val();

      $.ajax({
        url:ajax_url_child
        ,type:"GET"
        ,cache:false
        ,success:function(data){
          $("#" + child).html(data);
         }
      });
    });
  });
}
//-----------------------------------------------------------------------------
function RCM_AjaxPostToDiv(divId, formName, progressImg, callb, blockui)
{
  $('#'+ formName).ajaxForm({
    beforeSubmit: function(a,f,o) {
      $("#"+progressImg).css('visibility', 'visible');
      if (blockui) $("#"+divId).block('<h4 style="font-size:12pt"><img src="img/icon_ajax_loading.gif" />&nbsp;Processing...</h4>', { border: '2px solid #859EC7' });
    }
    , success: function(data) {
      $("#"+divId).empty().append(data);
      if (blockui) $("#"+divId).unblock();
      $("#"+progressImg).css('visibility', 'hidden');
      if (callb) callb();
      $('#'+ formName).unbind();
    }
  }).submit();
}
//-----------------------------------------------------------------------------
function RCM_AjaxPostToDivBlockUi(divId, formName, progressImg, callb, blockui)
{
  $('#'+ formName).ajaxForm({
    beforeSubmit: function(a,f,o) {
      $("#"+progressImg).css('visibility', 'visible');
      if (blockui) $("#"+blockui).unblock().block('<h4 style="font-size:12pt"><img src="img/icon_ajax_loading.gif" />&nbsp;Processing...</h4>', { border: '2px solid #859EC7' });
    }
    , success: function(data) {
      $("#"+divId).empty().append(data);
      if (blockui) $("#"+blockui).unblock();
      $("#"+progressImg).css('visibility', 'hidden');
      if (callb) callb();
      $('#'+ formName).unbind();
    }
  }).submit();
}
//-----------------------------------------------------------------------------
function RCM_AjaxBindForm(divId, formName, progressImg, callb, blockui)
{
  $('#'+ formName).ajaxForm({
    beforeSubmit: function(a,f,o) {
      $("#"+progressImg).css('visibility', 'visible');
      if (blockui) $("#"+divId).block('<h4 style="font-size:12pt"><img src="img/icon_ajax_loading.gif" />&nbsp;Processing...</h4>', { border: '2px solid #859EC7' });
    }
    , success: function(data) {
      $("#"+divId).empty().append(data);
      if (blockui) $("#"+divId).unblock();
      $("#"+progressImg).css('visibility', 'hidden');
      if (callb) callb();
      $('#'+ formName).unbind();
    }
  });

}
//-----------------------------------------------------------------------------
function RCM_UnblockUI()
{
  $.unblockUI();
  //$('*').css('cursor', '');
}
//-----------------------------------------------------------------------------
function RCM_BlockUI()
{
  $.blockUI('<h3 style="padding:10px 20px 10px 20px"><img src="img/icon_ajax_loading.gif" />&nbsp; Processing...</h3>');
}
//-----------------------------------------------------------------------------
// Popup Dialogs
//-----------------------------------------------------------------------------
function RCM_PopupConfirmDelete(msg, callback) {
  $('#pg_popup_confirm_delete')
    .jqm()
    .jqmShow()
    .find('div.msg').html(msg).end()
    .find('.yes').unbind('click').click(function(){callback();$('#pg_popup_confirm_delete').jqmHide();}).end()
    .find('.no' ).unbind('click').click(function(){$('#pg_popup_confirm_delete').jqmHide();}).end()
    .find('.focus').focus().end()
    ;
}
//-----------------------------------------------------------------------------
function RCM_PopupCountdownTimer(msgId, time_to_popup, callback_continue, callback_cancel) {
  $ct = $('#pg_popup_countdown_timer');
  $ct.stopTime();
  if ($ct.attr("init"))
  {
  }else{
    $ct.find('div.msg').html($(msgId).html()).end()
      .find('.continue').unbind('click').click(function(){ $ct.stopTime(); callback_continue();$ct.jqmHide();}).end()
      .find('.cancel' ).unbind('click').click(function(){ $ct.stopTime(); callback_cancel();$ct.jqmHide();}).end()
      .find('.focus').focus().end()
      .attr("init", "1")
      .jqm({modal :true})
      ;
  }
  limit = $(msgId).find(".pg_popup_countdown_timer_limit").text();

  $ct.find(".pg_popup_countdown_timer_limit").text(limit);
  $ct.oneTime(time_to_popup, function(){
    $ct.stopTime();
    $ct.jqmShow();
    $ct.everyTime("1s", function(){
      $cdn = $(this).find(".pg_popup_countdown_timer_limit");
      if (parseInt($cdn.text()) <= 0) { $ct.stopTime(); callback_cancel(); return;}
      $cdn.text(parseInt($cdn.text()) - 1);
    })
  });

}

//-----------------------------------------------------------------------------
function RCMT_Autocomplete(the_input, the_container, searchfor, formatfunction, autocomplete_page, add_parm, elementid, notshowall)
{
  var autoc = function(){
    var oACDS;
    var oAutoComp;

    return {
      init: function(additional_param) {
        if ( notshowall != 1 )
          notshowall = 0;
        oACDS = new YAHOO.widget.DS_XHR("/" + autocomplete_page, ["\n", "\t"]);
        oACDS.responseType = YAHOO.widget.DS_XHR.TYPE_FLAT;
        oACDS.maxCacheEntries = 0;
        oACDS.queryMatchSubset = true;
        searchparam = RCMT_GenUuid+"&searchfor="+searchfor+"&notshowall="+notshowall+additional_param;
        oACDS.scriptQueryAppend = searchparam;

        // Instantiate third AutoComplete
        oAutoComp = new YAHOO.widget.AutoComplete(the_input,the_container, oACDS);
        oAutoComp.useIFrame = true;
        oAutoComp.queryDelay = 0;
        oAutoComp.prehighlightClassName = "yui-ac-prehighlight";
        oAutoComp.formatResult = formatfunction;
        oAutoComp.autoHighlight = false;
        oAutoComp.forceSelection = false;
        oAutoComp.rcm_notshowall = notshowall;
        oAutoComp.useShadow = false;
        oAutoComp.maxResultsDisplayed = 20;

        oAutoComp.textboxKeyEvent.subscribe(
          function (oSelf , nKeycode) {
            var ivalue = RCMT_GetElementById(the_input).value;
            if( RCMT_trim(ivalue) == "")
              elementid.value = "";
          }
        );

        oAutoComp.textboxBlurEvent.subscribe(
          function (oSelf , nKeycode) {
            var ivalue = RCMT_GetElementById(the_input).value;
            if( RCMT_trim(ivalue) == "" || RCMT_trim(ivalue).toLowerCase().indexOf('*all') == 0  )
              elementid.value = "";

          }
        );


        if ( elementid != null )
        {
          oAutoComp.itemSelectEvent.subscribe(
            function (type, args) {
              elementid.value = args[2][1];
            }
          );
        }
      },

      validateForm: function() {
          // Validate form inputs here
          return false;
      }
    };
  }();
  YAHOO.util.Event.addListener(the_input,'load', autoc.init(add_parm));
}
//------------------------------------------------------------------------------
function RCMT_Autocomplete_formatResult(oResultItem, sQuery)
{
  var _value = oResultItem[0];

  s = "<div style='text-align:left;'>" + _value + "</div>";
  return s;
}

//------------------------------------------------------------------------------
function RCMT_Autocomplete_removeListener(element_id)
{
	YAHOO.util.Event.removeListener(element_id);
}