



/**
 *  Applications User Interface Utilities
 *  appsui.js
 *  see global.js
 * Modified to line# 300
 * $Id: appsui.js,v 1.2 2011/10/04 22:50:54 jkautz Exp $
 **/

if (typeof(cdc) == "undefined"){cdc = new Object();}

if ( document.layers ) {
    window.releaseEvents(Event.RESIZE);
    window.onresize = null;
}




var appsuiWinRef = new Array();

function openChildWindow( appurl, windowname ) {
  var appwindow = window.open( appurl , windowname, "toolbar=yes,status=yes,top=25,left=0,outerWidth=798,outerHeight=547,width=798,height=547,scrollbars=yes,resizable=yes,menubar=yes,locationbar=no,");
  setWinRef(windowname, appwindow);
  appwindow.focus();
}

function closeWindow() {
	self.close();
}

function openSmallPopup( popupurl, windowname ) {
  var popup = window.open( url , windowname, "toolbar=no,status=yes,scrollbars=yes,menubar=no,locationbar=no,top=90,left=290,outerWidth=220,outerHeight=390,width=220,height=390,resizable=yes");
  popup.focus();
}

function openPopup( popupurl, windowname ) {
	openSmallPopup( popupurl, windowname);
}

function openLargePopup( url, windowname ) {
  var popup = window.open( url , windowname, "toolbar=yes,status=yes,scrollbars=yes,menubar=yes,locationbar=no,top=50,left=70,outerWidth=643,outerHeight=468,width=643,height=468,resizable=yes");
  popup.focus();
}

function openMediumPopup( url, windowname ) {
  var popup = window.open( url , windowname, "toolbar=no,status=yes,scrollbars=yes,menubar=no,locationbar=no,top=90,left=170,outerWidth=445,outerHeight=390,width=445,height=390,resizable=yes");
  popup.focus();
}

function openWhatsChangedPopup( windowname ) {
	var popup = window.open( "/apps-ui/WhatsChanged.html", windowname, "toolbar=yes,status=yes,top=50,left=100,width=631,height=497,resizable=1,menubar=1");
	popup.focus();
}

function changeParentUrl( newurl ) {
	
	var openerClosed = false;
	var bName = navigator.appName;
	var bVersion = navigator.appVersion;
	//if( document.all && !document.getElementById() ) {
	if ((bName == "Microsoft Internet Explorer") && (bVersion.indexOf("MSIE 5.0") != -1)) {
		// opener.closed always returns false in IE ... makes sense, right?
		// let's roll our own function in VB, where we can trap errors...
		openerClosed = isOpenerClosed();
	} else {
		if( top.opener ) {
			openerClosed = top.opener.closed;
		} else {
			openerClosed = true;
		}
	}
	if( openerClosed ) {
		var newwin = window.open( newurl);
		newwin.focus();
	} else {
		top.opener.location.href = newurl;
		top.opener.focus();	
	}
}

// Creates a browser-generated alert or message box
// note:
// this was abstracted just in case we ever want to do anything
// with the string or send to non-pcs devices
function openMessage(str) {
	alert(str);
}

// Grabs a parameter from the URL.  Returns an empty
// string if parameter does not exist.
function getParameter(param) {

        var val = "";
        var qs = window.location.search;
        var start = qs.indexOf(param);

        if (start != -1) {
                start += param.length + 1;
                var end = qs.indexOf("&", start);
                if (end == -1) {
                        end = qs.length
                }
                val = qs.substring(start,end);
        }
        return val;
}

// Drop-down location.href redirection
function dropdown_redirect(select_name) {
        var theselect=eval(select_name);
        var tmp=theselect.selectedIndex;
        theselect.options[0].selected=true;
        location.href=theselect.options[tmp].value;
}

//set window reference
function setWinRef(windowname, windowref) {
	appsuiWinRef[windowname] = windowref;
}

//get window reference: recommended for users than to directly access appsuiWinRef as implementation may change in future.
function getWinRef(windowname) {
	var windowref = appsuiWinRef[windowname];
	if (windowref) 
		return windowref;
	else 
		return 0;
}



/*
 *---------------------------------------------------------------------------
 * Utils
 *  -------------------------------------------------------------------------
 */

 
if (typeof(cdc.appsutil) == 'undefined'){
   cdc.appsutil = new Object();
}



/*
 *---------------------------------------------------------------------------
 * This utility will change the protocol of the url for all asset references 
 * in this file for https applications on production or https applications 
 * testing with production assets.
 * It also sets a variable for all absolute path references in the js. Needs 
 * seperate dev, stage and prod versions to work correctly.
 *  -------------------------------------------------------------------------
 */


cdc.appsutil.protocol = "http:";
cdc.appsutil.assetServer = "www.cisco.com"; /* needs to be updated manually for dev, stage and prod */

cdc.appsutil.urlDetect = function ()
{
	
	var protocol = window.location.protocol;
	
	if ((protocol == "https:") && (cdc.appsutil.assetServer == "www.cisco.com")) {
		cdc.appsutil.protocol = protocol;
	}

}
cdc.appsutil.urlDetect();

cdc.appsutil.getPServer = function()
{
	return cdc.appsutil.protocol + "//" + cdc.appsutil.assetServer;
}


cdc.appsutil.setToHash = function(widget,val){
   var cur = cdc.appsutil.getFromHash();
   var newHash='';
   if (widget&&val){
      cur[widget] = val;
   }
   for (widget in cur){
      newHash += widget+'~'+cur[widget]+',';
   }
   newHash = newHash.substr(0,newHash.length-1);
   newHash = '#~'+newHash;
   window.location.hash = newHash;
};

cdc.appsutil.getFromHash = function(){
   var ret = new Object();
   var h = window.location.hash;
   if (h.indexOf("#~")<0){
      return ret;
   }
   h = h.substr(2);

   currHashArr = h.split(",");
   for (h=0; h<currHashArr.length; h++){
      var pair = new Array();
      pair = currHashArr[h].split('~');
      if (!(pair[1])){
         ret['tab']=pair[0];
      } else {
         ret[pair[0]] = pair[1];
      }
   }
   
   return ret;
};



cdc.appsutil.getSiteArea = function(){
	var cdcSiteArea='';
	var siteAreaFrom='';
	// Check URL for known matches
	var siteareasArray = [
		["\/web\/about\/", "About Cisco"],
		["\/web\/learning\/", "Learning and Events"],
		["\/web\/ordering\/", "Ordering"],
		["\/web\/partners\/", "Partners and Resellers"],
		["\/web\/strategy\/", "Industry Solutions"]
	];
	for (z = 0; z < siteareasArray.length; z++) {
		if (location.href.search(siteareasArray[z][0]) != -1) {
			cdcSiteArea = siteareasArray[z][1];
			siteAreaFrom = 'url';
		}
	}


	//check hinav
	try{
		//cdcSiteArea = document.getElementById("framework-column-left").getElementsByTagName('li')[1].childNodes[0].innerHTML;

		cdcSiteArea = document.getElementById("framework-column-left").getElementsByTagName('li')[1].getElementsByTagName('a')[0].innerHTML;

		siteAreaFrom = 'hinav';

	} catch(e) {}


	// Check "iaPath" Meta tag data if present
	var metatags = document.getElementsByTagName("meta");
	for (var m = 0; m < metatags.length; m++) {
		var curr_name = metatags[m].getAttribute("name");
		var curr_content = metatags[m].getAttribute("content");
		if (curr_name == "iaPath") {
			var iaPathArray = curr_content.split("#");
			cdcSiteArea = iaPathArray[1];
			siteAreaFrom = 'meta';
		}
	}
	for (m = 0; m < metatags.length; m++) {
		var curr_name = metatags[m].getAttribute("name");
		var curr_content = metatags[m].getAttribute("content");
		if (curr_name == "contentType") {
			if (curr_content.indexOf("postSales") > 0){
			  cdcSiteArea = "Support";
			  siteAreaFrom = 'meta(support)';
			}
		}
	}

	cdcSiteArea = cdcSiteArea.toLowerCase();
	var t = cdcSiteArea.split(' ');
	cdcSiteArea="";
	for (var m=0;m<t.length;m++){
		if (t[m]=='and'){
			cdcSiteArea += t[m] + " ";
		}
		else {
			cdcSiteArea += t[m].substring(0,1).toUpperCase() + t[m].substring(1) + " ";
		}
	}
	cdcSiteArea = cdcSiteArea.replace(/ $/,'');

	cdcSiteArea = cdcSiteArea.replace(/ &amp; /,'_and_');
	cdcSiteArea = cdcSiteArea.replace(/ /g,'_');
	cdcSiteArea = cdcSiteArea.replace(/Partner_Central/,'Partners_and_Resellers');
	cdcSiteArea = cdcSiteArea.replace(/Support/,'Tech_Support');
	return cdcSiteArea;

} // end getSiteArea()



/*
 *---------------------------------------------------------------------------
 * Legacy Support - adding apps.css to older templates
 *  -------------------------------------------------------------------------
 */
 
if (typeof(cdc.appscssloader) == "undefined"){

		cdc.appscssloader = function () {				
			var head = document.getElementsByTagName("head");			
			var appsCSSLoaded = false;
			for (var i=0; i < head[0].childNodes.length; i++)
			{
				if  (head[0].childNodes[i].type == "text/css")
				{
					var url = head[0].childNodes[i].href + "";	
					if (url.indexOf("apps.css")!= -1)
					{
						 appsCSSLoaded=true;
					}
				}
			}

			if (!appsCSSLoaded) // dynamically include the css
			{
				var headID = document.getElementsByTagName("head")[0];         
				var cssNode = document.createElement('link');
				cssNode.type = 'text/css';
				cssNode.rel = 'stylesheet';
				cssNode.href = cdc.appsutil.getPServer()+ '/web/fw/apps/c/apps.css';
				cssNode.media = 'screen';
				headID.appendChild(cssNode);
			}			
		};		
		
		
		//onload
		var __app_started = false;
		if(document.addEventListener) document.addEventListener("DOMContentLoaded", cdc.appscssloader, false);
		else 
		{
			//coomented below line and added next as below is causing IE Mixed Content alert, even if there is no mixed content
			//document.write("<scr" + "ipt id=__ie_onload defer src=javascript:void(0)><\/scri" + "pt>");
			//document.write("<scr" + "ipt id=\"__ie_onload\" defer language=\"JavaScript\" \" >void(0);<\/scri" + "pt>");
			document.write("<scr" + "ipt id=\"__ie_onload\" defer src=\"0\"><\/scri" + "pt>");
			var script = document.getElementById("__ie" + "_onlo" + "ad");
			script.onreadystatechange = function() 
			{
				if(this.readyState == "complete") cdc.appscssloader();       
			}
		}
		
		
}






/*
 *  -------------------------------------------------------------------------
 * Stepped Process
 *  -------------------------------------------------------------------------
 */
//==============Initialize Global Variables===================================
var _g_appStepContainer = null;
var _g_stepArray = new Array();
var _g_circleButtonWidth = 32;
var _g_minSize = 490;
var _g_ENABLED = 1;
var _g_DISABLED = 1;




/**
	Step Process Object 
	@param String - text
	@param String - 1/0 (1 enabled, 0 disabled)
	@param String - href
	@param int - inital width of text
*/
function StepProcess (label,status,href,width)
{
	this.label = label;
	this.status = status;
	this.href = href;
	this.width = width;
}

/**
	@private
	Responsible for creating boxes with arrows, numbers and label.
	
	@param int - position
	@param StepProcess - current StepProcess object
	@param int - computed last x position
	@param int - Best Calculated Width
*/
function createBox(i,_stepProcess,_lastPosition,_width)
{
	 

	var output = new Array();
	var buffer = "";
	var totalSpaceConsumed = 0;
	var imgFolder = cdc.appsutil.getPServer()+ "/web/fw/apps/i/";
	var currentProcess = _stepProcess;
	var buffer = ""; 
	
	if ((i==0) && (currentProcess.status==_g_ENABLED)) // for the first step enabled
	{
	
		buffer += "<div style='background: url("+imgFolder+"apps_steps_l_on_cap.gif) no-repeat;position:absolute;z-index:2;overflow:hidden;height:44px;width:" + (_width + _g_circleButtonWidth) + "px;left:" + _lastPosition + "px'>";
		buffer += "<div style='position:absolute;left:10px;top:13px;'><img title='Step "+ (i+1) +"' alt='Step "+ (i+1) +"' src='" + imgFolder + "apps_steps_" + (i+1) + "-on.gif' /></div>";
		buffer += "<div class='enabledJS' id='stepProcessText' name='stepProcessText' style='background:none;position:absolute;z-index:2;top:7px;left:" + (_lastPosition + _g_circleButtonWidth) +"px;border:0px;width:" + _width + "px'>" + _stepProcess.label + "</div>";
		buffer += "</div>";
		
		buffer += "<div class='enabledEnd' style='z-index:2;left:" + (_lastPosition + _g_circleButtonWidth  + _width) + "px'>";
		buffer += "</div>";
		
		totalSpaceConsumed +=  _g_circleButtonWidth + _width + 11; 
	}
	else if ((i==0) && (currentProcess.status!=_g_ENABLED)) // for the first step disabled
	{
	buffer += "<div style='background: url("+imgFolder+"apps_steps_l_off_cap.gif) no-repeat;position:absolute;z-index:2;overflow:hidden;height:44px;width:" + (_width + _g_circleButtonWidth) + "px;left:" + _lastPosition + "px'>";
		buffer += "<div style='position:absolute;left:10px;top:13px;'><img title='Step "+ (i+1) +"' alt='Step "+ (i+1) +"' src='" + imgFolder + "apps_steps_" + (i+1) + "-off.gif' /></div>";
		buffer += "<div class='disabledJS' id='stepProcessText' name='stepProcessText' style='background:none;position:absolute;z-index:2;top:7px;left:" + (_lastPosition + _g_circleButtonWidth) +"px;border:0px;width:" + _width + "px'>" + _stepProcess.label + "</div>";
		buffer += "</div>";
		if (_g_stepArray[i+1].status !=_g_ENABLED){
		buffer += "<div class='disabledStart' style='left:" + (_lastPosition + 28 + _width) + "px'>";
		buffer += "</div>";
		}
		if ((_g_stepArray[i+1] != null && _g_stepArray[i+1].status !=_g_ENABLED) || (i == _g_stepArray.length-1) )
		{
			totalSpaceConsumed +=  11
		}
		totalSpaceConsumed +=  _g_circleButtonWidth + _width; 
		
	}
	else if ((i!=0) && (currentProcess.status==_g_ENABLED)) // for the rest of steps enabled
	{
		buffer += "<div style='background: url("+imgFolder+"apps_steps_l_on.gif)  no-repeat;position:absolute;z-index:2;overflow:hidden;height:44px;width:" + (_width + _g_circleButtonWidth + 11) + "px;left:" + _lastPosition + "px'>";
	
		buffer += "<div style='position:absolute;top:13px;left:20px'><img title='Step "+ (i+1) +"' alt='Step "+ (i+1) +"' src='" + imgFolder + "apps_steps_" + (i+1) + "-on.gif'/></div>";
		buffer += "<div class='enabledJS' id='stepProcessText' name='stepProcessText' style='background:none;top:7px;position:absolute;z-index:2;left:44px;border:0px;width:" + (_width)+ "px'>" + _stepProcess.label + "</div>";
		
		buffer += "</div>";
		
		buffer += "<div class='enabledEnd' style='z-index:2;top:0px;left:" + (10 + _width + _g_circleButtonWidth + _lastPosition ) +"px' >";
		buffer += "</div>";
		if (i==(_g_stepArray.length-1)) //for last step
		{
			buffer += "<div class='stepsFill'><div class='stepsEnd'>";
			buffer += "</div></div>";
		}
		
		totalSpaceConsumed +=  _g_circleButtonWidth + _width + 22;
	}
	else
	{
		buffer += "<div style='background-image:url("+imgFolder+"apps_steps_m_off.gif);position:absolute;z-index:1;overflow:hidden;height:44px;width:" + (_width + _g_circleButtonWidth) + "px;left:" + _lastPosition + "px'>";
		buffer += "<div style='position:absolute;top:13px;left:10px'><img title='Step "+ (i+1) +"' alt='Step "+ (i+1) +"' src='" + imgFolder + "apps_steps_" + (i+1) + "-off.gif'/></div>";
		buffer += "<div class='disabledJS' id='stepProcessText' name='stepProcessText' style='background:none;top:7px;position:absolute;left:" + ( _g_circleButtonWidth) +"px;border:0px;width:" + _width + "px'>" + _stepProcess.label + "</div>";
		buffer += "</div>";
		
		if ((_g_stepArray[i+1] != null && _g_stepArray[i+1].status !=_g_ENABLED) || (i == _g_stepArray.length-1) )
		{
		buffer += "<div class='disabledStart' style='left:" + (_lastPosition + 28 + _width) + "px'>";
		buffer += "</div>";
		totalSpaceConsumed +=  11; 
		}
		if (i==(_g_stepArray.length-1)) //for last step
		{
			buffer += "<div class='stepsFill'><div class='stepsEnd'>";
			buffer += "</div></div>";
		}
		totalSpaceConsumed +=  _g_circleButtonWidth + _width;
	}
	
	output[0] = buffer;
	output[1] = totalSpaceConsumed;
	return output;
}

/**
	This method will calculate the appropriate width for every step and renders it. The method computes for the best available width for all
	the steps involved.
*/
function calculateWidthAndRender()
{
	// determine the optimum width for the steps container
	var tempSize = document.getElementById('stepProcess').offsetWidth;
	if (tempSize > _g_minSize)
	{
		_g_minSize = tempSize;
	}
	
	var shortSize = 60;
	
	var numOfSteps = _g_stepArray.length;
	
	//===========Calculate================
	var arrowsConsumption = 53 * numOfSteps;
	var allotedSpace = _g_minSize - arrowsConsumption;
	
	// get all the images width
	
	var maxAllotedSpace = allotedSpace/ numOfSteps;
	
	var tempTotalWidth = 0;
	for (var i=0; i < numOfSteps; i++)
	{
		var currentProcess = _g_stepArray[i];
		tempTotalWidth += currentProcess.width; 
	}
	
	var longComputedMaxSpace = 0;
	var shortSpace = 0;
	var longSpace = 0;
	var longCount = 0;
	
	// maximum spacing for width's
	var totalSpaceUsed = 0;
	for (var i=0; i < numOfSteps; i++)
	{
		var currentProcess = _g_stepArray[i];
		totalSpaceUsed += currentProcess.width;
	}
	
	for (var i=0; i < numOfSteps; i++)
	{
		var currentProcess = _g_stepArray[i];
		if (currentProcess.width <= shortSize)
		{
			shortSpace += currentProcess.width;
		}
		else
		{
			longSpace += currentProcess.width;
			longCount++;
		}
	}
	
	
	
	
	
	longComputedMaxSpace = (allotedSpace - shortSpace) / longCount;
	
	var buffer = "";
	var lastPosition = 0;
	for (var i=0; i < numOfSteps; i++)
	{
		var currentProcess = _g_stepArray[i];
		if ((currentProcess.width <= shortSize) || (totalSpaceUsed <=allotedSpace)) // width of the current space should be used instead
		{
			var output = createBox(i,currentProcess,lastPosition,currentProcess.width);
			buffer += output[0];
			lastPosition += output[1];
		}
		else
		{
			var output = createBox(i,currentProcess,lastPosition,longComputedMaxSpace);
			buffer += output[0];
			lastPosition += output[1];
		}
	}
	
	
	_g_appStepContainer.innerHTML = buffer;
	
	var stepProcessTextArray = document.getElementsByName("stepProcessText");
	for (var k=0; k < stepProcessTextArray.length; k++)
	{
		if (stepProcessTextArray[k].offsetHeight < 20)
		{
			stepProcessTextArray[k].style.top = "15px";
		}
	}

	return;
	
	
}

/**
	This method will parse the html objects and convert it to StepProcess object.
	@param htmlObject - html stepProcess object
*/
function parseElements(_obj)
{
	var _enabledExist = false;
	for(var i=0; i<_obj.childNodes.length; i++)
	{
		_tempNode  = _obj.childNodes[i];
		if(_tempNode.nodeName.toLowerCase() == "ol")
		{
			var _stepNodes  = _tempNode.childNodes;
			_g_appStepContainer = _tempNode;
			for (var j=0; j < _stepNodes.length; j++)
			{
				var _stepNode = _stepNodes[j];
				if(_stepNode.nodeType == 1)
				{
					var _stepLabel = _stepNode.innerHTML;
					var _status = _stepNode.attributes["class"].nodeValue;
					//var _url = _stepNode.attributes["href"].nodeValue;
					var _url = null;
					var _width = _stepNode.offsetWidth-20; // hack removed 20 px
					
					var _statusCode = 0; // disabled by default
					if (_status.toLowerCase().indexOf("enabled")!=-1 && !_enabledExist)
					{
						_statusCode = 1;
						_enabledExist = true;
					}
					
					_g_stepArray[_g_stepArray.length] = new StepProcess(_stepLabel,_statusCode,_url,_width);
				}
			}
		}
		
	}
}


/*
 *  -------------------------------------------------------------------------
 * Button Rebuild
 *  -------------------------------------------------------------------------
 */
 
if (typeof(cdc.button) == "undefined") {cdc.button = new Object();}
cdc.button.build = function () {
	//{{{
	try {document.execCommand("BackgroundImageCache", false, true);} catch(err) {}

	if(document.getElementsByTagName('input')){
		
  		var inputs = document.getElementsByTagName('input');
  		var cmdbuttons = [];
		var dcmdbuttons = [];
		var inacbuttons = [];
  for (var i = 0; i < inputs.length; i++) {
    if (inputs[i].className=="command-button") {
      cmdbuttons[cmdbuttons.length] = inputs[i];
    }
	else if (inputs[i].className=="default-command-button") {
      dcmdbuttons[dcmdbuttons.length] = inputs[i];
    }
	else if (inputs[i].className=="inactive-button") {
      inacbuttons[inacbuttons.length] = inputs[i];
    }
  }
  for (var i = 0; i < cmdbuttons.length; i++) {
    var original = cmdbuttons[i];
    var dleft = document.createElement('div');
	dleft.className = 'command-button-rounded';
    original.parentNode.replaceChild(dleft, original);
    var dright = document.createElement('div');
	dleft.appendChild(dright);
    dright.appendChild(original);
	dleft.onmouseover = function () {
		this.className='command-button-rounded-on';
  	}
	dleft.onmouseout = function () {
		this.className='command-button-rounded';
  	}
	dleft.onmousedown = function () {
		this.className='command-button-rounded-hit';
  	}
  }
  for (var i = 0; i < dcmdbuttons.length; i++) {
    var original = dcmdbuttons[i];
    var dleft = document.createElement('div');
	dleft.className = 'default-command-button-rounded';
    original.parentNode.replaceChild(dleft, original);
    var dright = document.createElement('div');
	dleft.appendChild(dright);
    dright.appendChild(original);
	dleft.onmouseover = function () {
		this.className='default-command-button-rounded-on';
  	}
	dleft.onmouseout = function () {
		this.className='default-command-button-rounded';
  	}
	dleft.onmousedown = function () {
		this.className='default-command-button-rounded-hit';
  	}
  }
  for (var i = 0; i < inacbuttons.length; i++) {
    var original = inacbuttons[i];
    var dleft = document.createElement('div');
    dleft.className = 'inactive-button-rounded';
    original.parentNode.replaceChild(dleft, original);
    var dright = document.createElement('div');
    dleft.appendChild(dright);
    dright.appendChild(original);
	
  }
}
	//}}}
}

cdc.button.buildOnLoad = function()
{
	addToWindowOnLoad(cdc.button.build);
}

cdc.button.buildOnLoad();

/*
 *  -------------------------------------------------------------------------
 * Table Rebuild
 *  -------------------------------------------------------------------------
 */
 
if (typeof(cdc.table) == "undefined") {cdc.table = new Object();}
cdc.table.build = function () {
	//{{{
	// local variables
	var ascOn = cdc.appsutil.getPServer()+ "/web/fw/apps/i/apps_table_arrow_asc_on.gif";
	var ascOff = cdc.appsutil.getPServer()+ "/web/fw/apps/i/apps_table_arrow_asc.gif";
	var dscOn = cdc.appsutil.getPServer()+ "/web/fw/apps/i/apps_table_arrow_dsc_on.gif";
	var dscOff = cdc.appsutil.getPServer()+ "/web/fw/apps/i/apps_table_arrow_dsc.gif";
	image1 = new Image();
	image1.src = ascOn;
	image2 = new Image();
	image2.src = ascOff;
	image3 = new Image();
	image3.src = dscOn;
	image4 = new Image();
	image4.src = dscOff;
	
	// private functions
	function get_previoussibling(n) {
		var x=n.previousSibling;
		while (x.nodeType!=1) {
			x=x.previousSibling;
		}
		return x;
	}
	
	if (document.getElementsByTagName('table'))
	{
		var tables = document.getElementsByTagName('table');
		var appsTables = [];
		 for (var i = 0; i < tables.length; i++) {
			 if ((tables[i].className == 'apps-table-grey') || (tables[i].className == 'apps-table-blue') || (tables[i].className == 'apps-table-grey-setwidth') || (tables[i].className == 'apps-table-blue-setwidth')) {
				appsTables[appsTables.length] = tables[i]; 
			 }
		 }
		 if (navigator.appName == "Microsoft Internet Explorer") {
			 for (var j = 0; j < appsTables.length; j++) 
			 { 
				 var tnodes = appsTables[j].childNodes;
				 for (var jkk = 0; jkk < tnodes.length; jkk++) {
					 if (tnodes[jkk].tagName == 'TBODY') {
						 var tbody = tnodes[jkk];
						 var rows = tbody.childNodes;
						 for (var jk = 0; jk < rows.length; jk++) {
							if (rows[jk].lastChild.tagName == 'TH') {
							rows[jk].lastChild.style.borderRight="none";
							} 
						}
					}
				
				 }
				 var lastrow = appsTables[j].lastChild.lastChild;
				 for (var k = 0; k < lastrow.childNodes.length; k++) {
					lastrow.childNodes[k].style.borderBottom="none";
				 }
			 }
		 }
		 var divs = document.getElementsByTagName("div");
		 var toolbars = [];
		 for (var l = 0; l < divs.length; l++) {
			 if ((divs[l].className == 'pagination-toolbar') || (divs[l].className == 'button-toolbar')) {
				toolbars[toolbars.length] = divs[l]; 
			 }
		 }
		 for (var m = 0; m < toolbars.length; m++) { 
		 	var sib = get_previoussibling(toolbars[m]);
			if ((sib.className == "apps-table-grey") || (sib.className == "apps-table-blue")) {
				sib.style.borderBottomWidth = "1px";
			}
		 }
	var headers= document.getElementsByTagName('th');
	for (var n = 0; n<headers.length; n++) {
		if (headers[n].className.match('apps-table-column-sortable')) {
			var childArray = headers[n].childNodes;
			for (var q=0; q<childArray.length;q++) {
				if (childArray[q].tagName == 'A') {
					childArray[q].onmousedown = function () {
						classstring = this.parentNode.className + "";
						classstring = classstring.replace('apps-table-column-sortable', 'apps-table-column-sortable-on');
						this.parentNode.className = classstring;
					}
					childArray[q].onmouseout = function () {
						classstring = this.parentNode.className + "";
						classstring = classstring.replace('apps-table-column-sortable-on',  'apps-table-column-sortable');
						this.parentNode.className = classstring;
					}
				}
			}
		}
		else if (headers[n].className.match('apps-table-column-sorted')) {
			for (z=0; z<headers[n].childNodes.length; z++) {
				if (headers[n].childNodes[z].tagName != 'A') {
					headers[n].removeChild(headers[n].childNodes[z]); //remove whitespaces from th
				}
			}
			var texthref = headers[n].firstChild; 
			var imghref = headers[n].lastChild; 
			var asc = /asc\.gif/;
			var dsc = /dsc\.gif/;
			for (y=0; y<imghref.childNodes.length; y++) {
				if (imghref.childNodes[y].tagName != 'IMG') {
					imghref.removeChild(imghref.childNodes[y]); //remove whitespaces next to img tag
				}
			}
			if (imghref.lastChild.src.match(asc)) {
				imghref.onmousedown = function () {
					this.lastChild.src = ascOn;
					this.parentNode.firstChild.style.color='#1c3c4d';
				}
				imghref.onmouseout = function () {
					this.lastChild.src = ascOff;
					this.parentNode.firstChild.style.color='#2f6681';
				}
				texthref.onmousedown = function () {
					this.parentNode.lastChild.lastChild.src = ascOn;
					this.parentNode.firstChild.style.color='#1c3c4d';
				}
				texthref.onmouseout = function () {
					this.parentNode.lastChild.lastChild.src = ascOff;
					this.parentNode.firstChild.style.color='#2f6681';
				}
			}
			else if (imghref.lastChild.src.match(dsc)) {
				imghref.onmousedown = function () {
					this.lastChild.src = dscOn;
					this.parentNode.firstChild.style.color='#1c3c4d';
				}
				imghref.onmouseout = function () {
					this.lastChild.src = dscOff;
					this.parentNode.firstChild.style.color='#2f6681';
				}
				texthref.onmousedown = function () {
					this.parentNode.lastChild.lastChild.src = dscOn;
					this.parentNode.firstChild.style.color='#1c3c4d';
				}
				texthref.onmouseout = function () {
					this.parentNode.lastChild.lastChild.src = dscOff;
					this.parentNode.firstChild.style.color='#2f6681';
				}
			}
		}
	}
	}
	//}}}
}

cdc.table.checkAll = function (x)
{

    var checkboxes = new Array();
    function recurseForCheckBox(x)
    {
          for (var i=0;i<x.childNodes.length;i++){
            if (x.childNodes[i].tagName == "INPUT" && x.childNodes[i].type == "checkbox")
            {
                checkboxes[checkboxes.length] = x.childNodes[i];
            }
            if (x.childNodes[i].childNodes.length > 0)
            {
                recurseForCheckBox(x.childNodes[i]);
            }
          
          }
    }
    //find all checkboxes
    checkboxes = new Array();
    recurseForCheckBox(x.parentNode.parentNode.parentNode);
    for (var k=0; k<checkboxes.length; k++)
    {
        checkboxes[k].checked = x.checked;
    }
}

cdc.table.buildOnLoad = function()
{
	addToWindowOnLoad(cdc.table.build);
}

cdc.table.buildOnLoad();

/*
 *  -------------------------------------------------------------------------
 * Tabs Build
 *  -------------------------------------------------------------------------
 */

if (typeof(cdc.tabs) == "undefined") {cdc.tabs = new Object();}
cdc.tabs.greyBar = null; 
cdc.tabs.tabElement = null;
cdc.tabs.subCat = null;
cdc.tabs.tabWidths = null;

cdc.tabs.build = function () {
	//{{{
	cdc.tabs.greyBar = document.getElementById("apps-tabs-greybar"); 
	cdc.tabs.tabElement = document.getElementById("apps-tabs");
	cdc.tabs.subCat = document.getElementById("apps-tabs-subcat");
	
	// Private methods 
    function switchToTallTabs () { // Private method
		cdc.tabs.tabElement.id = "apps-tabs-tall";
    }
	
	if (cdc.tabs.greyBar)
	{
		var tabElement = cdc.tabs.tabElement;
		var aspanTabArray = new Array();
		var totalLiWidth = 0;
		var availableLength = cdc.tabs.greyBar.offsetWidth;
		for (var i=0; i < tabElement.childNodes.length; i++)
		{
			if (tabElement.childNodes[i].nodeName.toLowerCase()  == "li")
			{
				var liNode = tabElement.childNodes[i];
				totalLiWidth += liNode.offsetWidth + 2;
				for (var j=0; j < liNode.childNodes.length; j++)
				{
					if (liNode.childNodes[j].nodeName.toLowerCase()  == "a")
					{
	
						var aNode = liNode.childNodes[j];
						aspanTabArray[aspanTabArray.length] = aNode;
						if (liNode.className == 'apps-tabs-active') {
							liNode.onmouseover = function() {
								this.className = 'apps-tabs-active-on';
							}
							liNode.onmouseout = function() {
								this.className = 'apps-tabs-active';
							}
							liNode.onmousedown = function() {
								this.className = 'apps-tabs-active-hit';
							}
						}
					}
					if (liNode.childNodes[j].nodeName.toLowerCase()  == "span")
					{
						var sNode = liNode.childNodes[j];
						aspanTabArray[aspanTabArray.length] = sNode;
					}
				}
			}
		}
		if (cdc.tabs.tabWidths != null){
			switchToTallTabs();
			for (var k=0; k < aspanTabArray.length; k++)
				{
					if (aspanTabArray[k].offsetWidth > 100)
					{
						var originalWidth = aspanTabArray[k].offsetWidth;
						var width = (aspanTabArray[k].offsetWidth / 2);
						var textWidth = width;
						aspanTabArray[k].style.width = width + "px";
					}
				}
				
			var widthArray = cdc.tabs.tabWidths.split(',');
			for (var j=0; j < widthArray.length; j++)
			{
				var tabNumber = widthArray[j]-1;
				var tabWidth = widthArray[j+1]-25;
				aspanTabArray[tabNumber].style.width = tabWidth + "px";
				j++;
			}
		}
		else {
			
			if (totalLiWidth > availableLength)
			{
				switchToTallTabs();
				for (var m=0; m < aspanTabArray.length; m++)
				{
				
					if (aspanTabArray[m].offsetWidth > 100)
					{
						var width = (aspanTabArray[m].offsetWidth / 2);
						var textWidth = width;
						aspanTabArray[m].style.width = width + "px";
					}
				}
	
			}
		}
		
		var subcat=cdc.tabs.subCat;
		var liSubcatArray = new Array();
		for (var n=0; n < subcat.childNodes.length; n++)
		{
			if (subcat.childNodes[n].nodeName.toLowerCase()  == "li")
			{
				var liNode = subcat.childNodes[n];
				liSubcatArray[liSubcatArray.length] = liNode;
			}
		}
		liSubcatArray[liSubcatArray.length-1].style.background='none';  //for IE6 lastchild pseudoclass
	}
	//}}}
}

cdc.tabs.buildOnLoad = function(){
	addToWindowOnLoad(cdc.tabs.build);	
}

cdc.tabs.buildOnLoad();

/*
 *  -------------------------------------------------------------------------
 * Calendar Build
 *  -------------------------------------------------------------------------
 */

if (typeof(cdc.calendar) == "undefined") {cdc.calendar = new Object();}

cdc.calendar.imgFolder = cdc.appsutil.getPServer()+ "/web/fw/apps/i/";

cdc.calendar.preloaded = false;
cdc.calendar.build = function ()
{
    if(document.getElementsByTagName('input'))
    {
        var imgs = document.getElementsByTagName('input');
        for (var i = 0; i < imgs.length; i++) {
        if (imgs[i].className=="apps-cal-default") {
            if (cdc.calendar.preloaded == false)
            {
                var i1 = document.createElement("div"); 
                i1.className = "apps-cal-previous-default";
                i1.style.display = "none";
                var i2 = document.createElement("div"); 
                i2.className = "apps-cal-next-default";
                i2.style.display = "none";
                document.body.appendChild(i1);
                document.body.appendChild(i2);   

                cdc.calendar.preloaded = true;
            }
        }
    }
    }
}



cdc.calendar.buildOnLoad = function(){
	addToWindowOnLoad(cdc.calendar.build);	
}
cdc.calendar.buildOnLoad();


/***** Reusable Container for calendar ********/
cdc.calendar.monthName = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
cdc.calendar.mmmMonthName = new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
cdc.calendar.daysName = new Array('S','M','T','W','T','F','S');

cdc.calendar.currentMonth = null;  
cdc.calendar.currentYear = null; 
cdc.calendar.currentDate = null; 

cdc.calendar.dateToday = new Date();
cdc.calendar.monthNow = cdc.calendar.dateToday.getMonth();
cdc.calendar.dateNow = cdc.calendar.dateToday.getDate();
cdc.calendar.yearNow = cdc.calendar.dateToday.getFullYear();

cdc.calendar.now = new Date();
cdc.calendar.calendars = new Array();
cdc.calendar.activeCalendarTextField = null;
cdc.calendar.activeDateFormat = null;

cdc.calendar.getLastMonth = function()
{
	
	var gLast;
	gLast = cdc.calendar.currentMonth-1;
	var d = new Date();
	d.setDate(1);
	d.setMonth(gLast);
	d.setYear(cdc.calendar.currentYear);
	
	var daysLastMonth = cdc.calendar.getLength(d);
	return daysLastMonth;
}

cdc.calendar.getLength = function(_dateObject)
{
	
	var tempMonth = _dateObject.getMonth();
	var _tempCurrentMonth = tempMonth+1;
	
	var numDays = 30;
	switch(_tempCurrentMonth)
	{
	
		case 1: //January
			numDays= 31;
			break;
		case 2:
			if((_dateObject.getFullYear()%4==0&&_dateObject.getFullYear()%100!=0)||_dateObject.getFullYear()%400==0)
			{
			numDays= 29;
			}
			else
			{
			numDays= 28;
			}
			break;
		case 3:
			numDays= 31;
			break;
		case 5:
			numDays= 31;
			break;
		case 7:
			numDays= 31;
			break;
		case 8:
			numDays= 31;
			break;
		case 10:
			numDays= 31
			break;
		case 12:
			numDays= 31
			break;
		default:
			numDays= 30;
			break;
	}
	
	return numDays;
}


cdc.calendar.dateAdd = function (_dateObj,type,num)
{                                                 
	var resultObjDate = null;
	var defaultMonth = _dateObj.getMonth();       
	var defaultDay = _dateObj.getDate();
	var defaultYear = _dateObj.getFullYear();
	if (type == "m")
	{
		defaultMonth = defaultMonth + num;
		if (defaultMonth <= -1)
		{
			defaultMonth = 11;
			defaultYear = defaultYear - 1;	
		}
		else if (defaultMonth >11)
		{
			defaultYear = defaultYear + 1;
			defaultMonth = 0;
		}
		_dateObj.setDate(1);
		_dateObj.setMonth(defaultMonth);
		_dateObj.setYear(defaultYear);
		resultObjDate = _dateObj;	
		return _dateObj;
	}
	else if (type == "d"){}
	else if (type == "y"){}
}


cdc.calendar.lastMonth = function()
{	
	cdc.calendar.dateToday = cdc.calendar.dateAdd (cdc.calendar.dateToday,"m",-1);
	cdc.calendar.monthNow = cdc.calendar.dateToday.getMonth();
	cdc.calendar.yearNow = cdc.calendar.dateToday.getFullYear();
	
	document.getElementById("apps-cal-contents").innerHTML = cdc.calendar.generateCalendar(cdc.calendar.monthNow,1,cdc.calendar.yearNow);
	cdc.calendar.changeMonthName();
	
	
	cdc.calendar.addCalendarListener();
}


cdc.calendar.nextMonth = function ()
{	
	cdc.calendar.dateToday = cdc.calendar.dateAdd (cdc.calendar.dateToday,"m",1);
	
	cdc.calendar.monthNow = cdc.calendar.dateToday.getMonth();
	cdc.calendar.yearNow = cdc.calendar.dateToday.getFullYear();
	document.getElementById("apps-cal-contents").innerHTML =cdc.calendar.generateCalendar(cdc.calendar.monthNow,1,cdc.calendar.yearNow);
	cdc.calendar.changeMonthName();
	
	cdc.calendar.addCalendarListener();
}

cdc.calendar.dateFormatter = function (_month,_day,_year)
{
	var day = _day;
	var month = _month;
	var year = _year;
	
	
	if (day < 10)
	{
		day = "0" + day;
	}
	
	if (month < 10)
	{
		month = "0" + month;
	}
	
	switch (cdc.calendar.activeDateFormat) {
		//international
		case "dd-mm-yyyy":
			return day + "-" + month + "-" + year;
		case "dd/mm/yyyy":
			return day + "/" + month + "/" + year;	
		case "dd-mmm-yyyy":
			return day + "-" + cdc.calendar.mmmMonthName[_month-1] + "-" + _year;
		case "dd/mmm/yyyy":
			return day + "/" + cdc.calendar.mmmMonthName[_month-1] + "/" + _year;
		//us & canada
		case "mm-dd-yyyy":
			return month + "-" + day + "-" + _year;
		case "mm/dd/yyyy":
			return month + "/" + day + "/" + year;
		case "mmm/dd/yyyy":
			return cdc.calendar.mmmMonthName[_month-1] + "/" + day + "/" + _year;
		default: //mmm-dd-yyyy
			return cdc.calendar.mmmMonthName[_month-1] + "-" + day + "-" + _year;
	}
}
cdc.calendar.showDate = function(dateValue)
{
	
	document.getElementById(cdc.calendar.activeCalendarTextField).value = dateValue;
	cdc.calendar.closeAllCalendar();
}

cdc.calendar.getCellFormat = function (cellNum)
{
	var cellType = "";
	if (cellNum % 7 == 0)
	{
		cellType = "apps-cal-num-days-container-left";
	}
	else
	if (cellNum % 7 == 6)
	{
		cellType = "apps-cal-num-days-container-right";
	}
	else
	{
		cellType = "apps-cal-num-days-container-middle";
	}
	
	if (cellNum >= 35)
	{
		cellType += " apps-cal-num-days-container-bottom";
	}
	return cellType;
}


cdc.calendar.changeMonthName = function ()
{
	var currentMonthName = cdc.calendar.monthName[cdc.calendar.monthNow];
	document.getElementById("month").innerHTML = currentMonthName + " " + cdc.calendar.yearNow;
}

cdc.calendar.previousMonthState = function (state)
{
	var cssState = "apps-cal-previous-" + state;
	document.getElementById("apps-cal-previous-link").className = cssState;
}

cdc.calendar.nextMonthState = function (state)
{
	var cssState = "apps-cal-next-" + state;
	document.getElementById("apps-cal-next-link").className = cssState;
}

cdc.calendar.drawHeader = function ()
{
	var buffer = "";
	var currentMonthName = cdc.calendar.monthName[cdc.calendar.monthNow];	
	buffer ='<div id="apps-cal-container">';
	buffer +='	<div id="apps-cal-buttons-container">';
	buffer +='		<div  id="apps-cal-previous">';
	buffer +='			<div  title="Previous Month" id="apps-cal-previous-link" class="apps-cal-previous-default" onmouseup="cdc.calendar.previousMonthState(\'hover\')" onmouseout="cdc.calendar.previousMonthState(\'default\')" onmouseover="cdc.calendar.previousMonthState(\'hover\')" onmousedown="cdc.calendar.previousMonthState(\'click\')" onclick="javascript:cdc.calendar.lastMonth()"></div>';
	buffer +='		</div>';
	buffer +='		<div id="apps-cal-month-container"><span id="month">'+currentMonthName+' '+cdc.calendar.yearNow +'</span></div>';
	buffer +='		<div  id="apps-cal-next">';
	buffer +='			<div  id="apps-cal-next-link" class="apps-cal-next-default" title="Next Month" onmouseup="cdc.calendar.nextMonthState(\'hover\')" onmouseout="cdc.calendar.nextMonthState(\'default\')" onmouseover="cdc.calendar.nextMonthState(\'hover\')" onmousedown="cdc.calendar.nextMonthState(\'click\')"  onclick="javascript:cdc.calendar.nextMonth()"></div>';
	buffer +='		</div>';
	buffer +='	</div>';
	buffer += "<div id='apps-cal-contents'>";
	return buffer;
}

cdc.calendar.drawFooter = function ()
{
	var buffer = "";
	buffer +='</div>';
	buffer +='</div>';
	return buffer;
}

cdc.calendar.generateCalendar = function(month,day,year)
{
	
	cdc.calendar.currentMonth = month;
	cdc.calendar.currentYear = year;
	cdc.calendar.currentDate = day;
	
	var currentDayDateObj = new Date();
	
	currentDayDateObj.setMonth(parseInt(month));
	currentDayDateObj.setYear(cdc.calendar.currentYear);
	currentDayDateObj.setDate(1);
	
	var firstDayOfTheMonth = new Date(cdc.calendar.currentYear,cdc.calendar.currentMonth,cdc.calendar.currentDate);
	firstDayOfTheMonth.setMonth(cdc.calendar.currentMonth);
	firstDayOfTheMonth.setYear(cdc.calendar.currentYear);
	firstDayOfTheMonth.setDate(1);
	
	
	var firstDayInWeek = firstDayOfTheMonth.getDay();

	var _monthName = cdc.calendar.monthName[cdc.calendar.currentMonth];

	var numberOfDaysInMonth = cdc.calendar.getLength(firstDayOfTheMonth);
	var lastMOnthNumOfDays = cdc.calendar.getLastMonth();

	var currentMonthName = cdc.calendar.monthName[cdc.calendar.monthNow];

	var buffer ="";
	
	for(days=0;days<cdc.calendar.daysName.length;days++)
	{                        
		if (days == 0)
		{
			buffer += "<div class='apps-cal-days-container-left'>" +cdc.calendar.daysName[days]+"</div>";
		}
		else
		if (days != cdc.calendar.daysName.length-1)
		{
			buffer += "<div class='apps-cal-days-container'>" +cdc.calendar.daysName[days]+"</div>";
		}
		else
		{
			buffer += "<div class='apps-cal-days-container-right'>" +cdc.calendar.daysName[days]+"</div>";
		}
	}
	
	
	
	
	var a=1;
	var b=1;
	var displayMonth = cdc.calendar.monthNow;
	for(dateNum=0;dateNum<42;dateNum++)
	{
		var displayDate = (dateNum - firstDayInWeek + 1);
		
		if (dateNum < firstDayInWeek)
		{  
			if (cdc.calendar.monthNow == 0)
			{
			 var dateTextValue = cdc.calendar.dateFormatter((displayMonth+12),(lastMOnthNumOfDays - (firstDayInWeek  - b)),((parseInt(cdc.calendar.yearNow)-1)));
			}
			else
			{
			 var dateTextValue = cdc.calendar.dateFormatter((displayMonth),(lastMOnthNumOfDays - (firstDayInWeek  - b)) ,  cdc.calendar.yearNow);
			}
			buffer += '<div  class="apps-cal-prev '+ cdc.calendar.getCellFormat(dateNum) +'"><a  href="javascript:cdc.calendar.showDate(\'' + dateTextValue + '\')" class="prev">'+ (lastMOnthNumOfDays - (firstDayInWeek  - b)) +'</a></div>';
			b++;
		}
		else if(displayDate==cdc.calendar.now.getDate() && cdc.calendar.currentMonth == cdc.calendar.now.getMonth() && cdc.calendar.currentYear == cdc.calendar.now.getFullYear())
		{
			var dateTextValue = cdc.calendar.dateFormatter((displayMonth+1),displayDate , cdc.calendar.yearNow);
			buffer += '<div class="apps-cal-today '+ cdc.calendar.getCellFormat(dateNum) +'"><a  href="javascript:cdc.calendar.showDate(\'' + dateTextValue + '\')" class="today">'+displayDate+'</a></div>';
		}
		else if(displayDate > numberOfDaysInMonth)
		{
			if (cdc.calendar.monthNow == 11)
			{
				var dateTextValue = cdc.calendar.dateFormatter((displayMonth-10) ,a ,(parseInt(cdc.calendar.yearNow)+1));
			}
			else
			{
				var dateTextValue = cdc.calendar.dateFormatter((displayMonth+2) , a , cdc.calendar.yearNow);
			}
			buffer += '<div class="apps-cal-next '+ cdc.calendar.getCellFormat(dateNum) +'"><a   href="javascript:cdc.calendar.showDate(\'' + dateTextValue + '\')" class="next">'+ a +'</a></div>';
			a++;
		}
		else
		{
			
			var dateTextValue = cdc.calendar.dateFormatter((displayMonth+1) , displayDate, cdc.calendar.yearNow);
			
			buffer += '<div class="apps-cal-reg '+ cdc.calendar.getCellFormat(dateNum) +'"><a  href="javascript:cdc.calendar.showDate(\'' + dateTextValue + '\')">' + displayDate + '</a></div>';
		}
	
	}
	
	
	
	return buffer;
}



cdc.calendar.closeAllCalendar = function()
{
	try
	{
	for (var calName in cdc.calendar.calendars)
	{
		cdc.calendar.calendars[calName] = false;
	}
	document.getElementById("apps-cal-container-box-id").style.visibility = "hidden";
	}catch (e) {}
}

cdc.calendar.clicker = function(e)
{
	
	if (!e) var e = window.event;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
	
}

cdc.calendar.docClicker = function(e)
{
	if (!e) var e = window.event;
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	
	if ((targ.className != "apps-cal-default") && (targ.className != "apps-cal-click") && (targ.className != "apps-cal-hover"))
	{
		cdc.calendar.closeAllCalendar();
	}
}

cdc.calendar.changeImage = function(theImage,newSrc)
{
	theImage.src = newSrc;
}

cdc.calendar.changeBackground = function(obj,state)
{
	obj.className = "apps-cal-" + state;
}

cdc.calendar.togglepress = function (event,objCaller,textField,dateFormat)
{
	if (!event) var event = window.event;
	var key = event.keyCode ? event.keyCode : event.which;
	var tabkey = 9;
	if (key != tabkey)
	{
		cdc.calendar.toggle(objCaller,textField,dateFormat);
		window.setTimeout(function () { document.getElementById("apps-cal-previous").focus(); },0);
	}
	else
	{
		cdc.calendar.closeAllCalendar();
	}
}

cdc.calendar.toggle = function (objCaller,textField,dateFormat)
{
	
	cdc.calendar.init();
	
	calContainer = "apps-cal-container-box-id";
	cdc.calendar.activeCalendarTextField = textField;
	activeCalendar = calContainer;
	cdc.calendar.activeDateFormat = dateFormat;
	
	calContainerTemp = calContainer + textField;
	
	
	if (cdc.calendar.calendars[calContainerTemp] == undefined)
	{
		cdc.calendar.calendars[calContainerTemp] = false;
	}
	if (cdc.calendar.calendars[calContainerTemp] == false)
	{
		cdc.calendar.closeAllCalendar();
		cdc.calendar.showMyCalendar(calContainer);
		document.getElementById(calContainer).style.visibility = "visible";
		document.getElementById(calContainer).style.top = (cdc.calendar.getAbsY(objCaller) + 26) + "px";
		document.getElementById(calContainer).style.left = (cdc.calendar.getAbsX(objCaller) - 101+6) + "px";
		cdc.calendar.calendars[calContainerTemp] = true;
		cdc.calendar.addCalendarListener();
	}	
	else
	{
		document.getElementById(calContainer).style.visibility = "hidden";
		cdc.calendar.calendars[calContainerTemp] = false;
	}
}

cdc.calendar.convertMMMStringToNumber = function(mmm)
{
	for (var i=0; i < cdc.calendar.mmmMonthName.length; i++)
	{
		if ((mmm+"").toLowerCase() == cdc.calendar.mmmMonthName[i].toLowerCase())
		{
			return i+1;
		}
	}
}

cdc.calendar.showMyCalendar = function(calContainer)
{
	var tempDateVal = document.getElementById(cdc.calendar.activeCalendarTextField).value;
	
	try
	{
	if (cdc.calendar.activeDateFormat == "mm/dd/yyyy")
	{
		var strLength = tempDateVal.split("/");
			cdc.calendar.monthNow = strLength[0];
			cdc.calendar.dateNow = strLength[1];
			cdc.calendar.yearNow = strLength[2];
			
			if (cdc.calendar.monthNow[0] == "0")
			{
				cdc.calendar.monthNow = cdc.calendar.monthNow[1]; 
			}
			if (cdc.calendar.dateNow[0] == "0")
			{
				cdc.calendar.dateNow = cdc.calendar.dateNow[1]; 
			}
	}
	else
	{
		var strLength = tempDateVal.split("-");
	
		cdc.calendar.monthNow = cdc.calendar.convertMMMStringToNumber(strLength[0]);
		cdc.calendar.dateNow = parseInt(strLength[1]);
		cdc.calendar.yearNow = parseInt(strLength[2]);
	}
	}
	catch (e)
	{
	}
	
	
	if ((cdc.calendar.yearNow == undefined) || (cdc.calendar.monthNow == undefined) || (cdc.calendar.dateNow == undefined) ||
		isNaN(cdc.calendar.yearNow) || isNaN(cdc.calendar.monthNow) ||  isNaN(cdc.calendar.dateNow)) 
	{
		var currentDate = new Date();
		cdc.calendar.monthNow = currentDate.getMonth();
		cdc.calendar.dateNow  = currentDate.getDate();
		cdc.calendar.yearNow  = currentDate.getFullYear();
		
		
		cdc.calendar.dateToday = currentDate;
	}
	else
	{
		cdc.calendar.monthNow = cdc.calendar.monthNow - 1;	
		cdc.calendar.dateToday.setMonth(cdc.calendar.monthNow);
		cdc.calendar.dateToday.setYear(cdc.calendar.yearNow);
		cdc.calendar.dateToday.setDate(cdc.calendar.dateNow);
		
		
		
	}
	
	cdc.calendar.init();
	document.getElementById("apps-cal-contents").innerHTML = cdc.calendar.generateCalendar(cdc.calendar.monthNow,cdc.calendar.dateNow,cdc.calendar.yearNow);
	cdc.calendar.changeMonthName();
	cdc.calendar.addCalendarListener();	
}

cdc.calendar.addCalendarListener = function ()
{
	if (document.all)
	{
			
		document.getElementById("apps-cal-container").attachEvent('onclick', cdc.calendar.clicker);
		document.attachEvent("onclick",cdc.calendar.docClicker);
	}
	else
	{
		document.getElementById("apps-cal-container").addEventListener("click",cdc.calendar.clicker,false);
		document.addEventListener("click",cdc.calendar.docClicker,false);
	}
}


cdc.calendar.containerInitialized = 0;
cdc.calendar.init = function()
{
	if (cdc.calendar.containerInitialized == 0)
	{
		 var calContainer = document.createElement("div"); 
		 calContainer.id = "apps-cal-container-box-id";
		 calContainer.className = "apps-cal-container-box";
		 calContainer.innerHTML = cdc.calendar.drawHeader();
		 document.body.appendChild(calContainer);
		 cdc.calendar.containerInitialized = 1;
	}
}



/************Positioning functions*********************/

cdc.calendar.getAbsX = function (elt) 
{ 
	return parseInt(elt.x) ? elt.x :
	cdc.calendar.getAbsPos(elt,"Left"); 
};

cdc.calendar.getAbsY = function(elt) 
{ 
	return parseInt(elt.y) ? elt.y :
	cdc.calendar.getAbsPos(elt,"Top"); 
};
cdc.calendar.getAbsPos =  function(elt,which) 
{
	iPos = 0;
	while (elt != null) 
	{
		iPos += elt["offset" + which];
		elt = elt.offsetParent;
	}
	return iPos;
};


/*
 *  -------------------------------------------------------------------------
 * File Includer for Widgets
 *  -------------------------------------------------------------------------
 */

if (typeof(cdc.appsfileincluder) == "undefined"){

	cdc.appsfileincluder = {};
	cdc.appsfileincluder.widgets = {		
		'apps-widget-accordion' : {

		 js: [			
			cdc.appsutil.getPServer()+ '/web/fw/apps/j/apps-jquery.hoverIntent.minified.js',
			cdc.appsutil.getPServer()+ '/web/fw/apps/j/apps-accordion.js'
			]
		
      }

	};
	cdc.appsfileincluder.search = function(){		
		for (id in cdc.appsfileincluder.widgets){
			if (document.getElementById(id)){
				if (cdc.appsfileincluder.widgets[id]['css']){					
					for (var i=0;i<cdc.appsfileincluder.widgets[id]['css'].length;i++){
						//NEED TO check for css in dom
						//include css if not there already
						var ss = document.createElement('link');
						ss.setAttribute('rel', 'stylesheet');
						ss.setAttribute('type', 'text/css');
						ss.setAttribute('href', cdc.appsfileincluder.widgets[id]['css'][i]);
						document.getElementsByTagName('head')[0].appendChild(ss);
					}
				}
				
				if (cdc.appsfileincluder.widgets[id]['js'] && cdc.appsfileincluder.widgets[id]['js'].length){			
					cdc.appsfileincluder.loadJs(cdc.appsfileincluder.widgets[id]['js']);
				}
			}
		}
	};
	
	cdc.appsfileincluder.loadJs = function(includes){
		var currentFile = includes.shift();
		//NEED TO check for js in dom
		//include js if not there already
		var scriptNode = document.createElement('script');
		document.getElementsByTagName("head")[0].appendChild(scriptNode);
		scriptNode.language='javascript';
		if (includes.length){
			if(document.attachEvent){//IE
				scriptNode.onreadystatechange = function(){
					if (this.readyState == "loaded") {
						cdc.appsfileincluder.loadJs(includes);
					}
				}
			}
			else{
				scriptNode.onload = function(){cdc.appsfileincluder.loadJs(includes);};
			}
		}
		scriptNode.src=currentFile;
	};
	jQuery(cdc.appsfileincluder.search);	
}

/**
 *  CAMP javascript functions for API (DHTML) Tabs
 *  based on tabs.js
 *  $Revision: 1.2 $
 */


var vlc=0; // need to prevent logging of mousedowns

function appsInitTabs (){
	// find our tabs on the page
	var divList = document.getElementsByTagName("div");
	for (var i=0;divList[i];i++){
		if (divList[i].className == 'apps-pagetabs'){
			appsInitTab(divList[i]);
			break;
		}
	}
}

function appsInitTab (tabWrapper){
	var tabRow = document.createElement('tr');
	var subtabDiv = document.createElement('div');
	subtabDiv.id = "apps-subtabs";

	var hadTabs = false; 
	var hadSubTabs = false;

	var divList = tabWrapper.getElementsByTagName("div");
	for (var i=0; divList[i];i++){
		// if the div is a main tab do this
		if ((divList[i].className == "apps-tab-active") || (divList[i].className == "apps-tab-inactive") || (divList[i].className == "apps-tab-selected")){

			var hadTabs = true;
			var cell = document.createElement('td');
			cell.className = divList[i].className;
			var innerContent = divList[i].innerHTML;
			var newCorner = "<span class='apps-tabcorner'><span></span></span>";
			cell.innerHTML = newCorner + innerContent;

			// add the new tab to the table row
			tabRow.appendChild(cell);

			// hide the original
			divList[i].style.display = "none";
			divList[i].innerHTML = "";
		} // end if it's a tab

		// if the div is a subtab do this
		if ( divList[i].className == "apps-subtab" ) {
			hadSubTabs = true;
			
			//remove last border from subtab list
			var subtabUL;
			var subtabContainer = divList[i];
			for (var j=0; j < subtabContainer.childNodes.length; j++)  {
				if (subtabContainer.childNodes[j].nodeName.toLowerCase()  == "ul") {
					var subtabUL = subtabContainer.childNodes[j];
				}
			}
			var liArray = new Array();
			for (var n=0; n < subtabUL.childNodes.length; n++) {
				if (subtabUL.childNodes[n].nodeName.toLowerCase()  == "li") {
					var liNode = subtabUL.childNodes[n];
					liArray[liArray.length] = liNode;
				}
			}
			liArray[liArray.length-1].style.border='none'; 
			
			// create a div for that particular subtab 
			var mySubtab = document.createElement("div");
			mySubtab.innerHTML = divList[i].innerHTML;
			mySubtab.className = "apps-subtab";
			mySubtab.id = divList[i].id;

			subtabDiv.appendChild(mySubtab);

			// hide the original
			divList[i].id ="";
			divList[i].style.display="none";
			divList[i].innerHTML="";
		} // end if it's a subtab

	} // end for divs in tabList

	if (hadTabs) {
		var tableNode = document.createElement('table');
		tableNode.appendChild(document.createElement('tBody'));
		tableNode.tBodies[0].appendChild(tabRow);

		var tabDiv = document.createElement('div');
		tabDiv.className = "apps-tabset";
		tabDiv.appendChild(tableNode);
	}
	if (hadSubTabs) {
		tabWrapper.insertBefore(subtabDiv,tabWrapper.childNodes[0]);
	}
	tabWrapper.insertBefore(tabDiv,tabWrapper.childNodes[0]);

}

/**
 *  javascript for Optional Links API
 *  detects component following it and adjusts class name accordingly
 *  also removes last pipe in subtab list
 */

if (typeof(cdc) == "undefined"){cdc = new Object();}

if (typeof(cdc.appsoptlinks) == "undefined") {cdc.appsoptlinks = new Object();}
cdc.appsoptlinks.updatestyle = function () {
	if (document.getElementById('apps-optlinks')) {
		var optlink = document.getElementById('apps-optlinks');
		//look for camp html tabs component
		if (document.getElementById('apps-tabs')) { 
			optlink.className = "apps-optlinks-container-htmltabs";
		}
		//look for camp stepped process component
		else if (document.getElementById('stepProcess')) {
			optlink.className = "apps-optlinks-container-steps";
		}
		else  {
			var divs = document.getElementsByTagName('div');
			 for (var i = 0; i < divs.length; i++) {
				 //look for camp api tabs component
    			if (divs[i].className=="apps-pagetabs") {
      				optlink.className = "apps-optlinks-container-apitabs";
    			}

			 }
		}
		//remove lastchild pipe in IE
		var optlinkUL;
		var uls = document.getElementsByTagName('ul');
		for (var i = 0; i < uls.length; i++) {
			if (uls[i].className == 'apps-optlinks') {
				optlinkUL =  uls[i];
			}
		}
		var liArray = new Array();
		for (var n=0; n < optlinkUL.childNodes.length; n++) {
			if (optlinkUL.childNodes[n].nodeName.toLowerCase()  == "li") {
				var liNode = optlinkUL.childNodes[n];
				liArray[liArray.length] = liNode;
			}
		}
		liArray[liArray.length-1].style.border='none'; 
		
	}
}

cdc.appsoptlinks.styleonload = function()
{
	addToWindowOnLoad(cdc.appsoptlinks.updatestyle);
}

cdc.appsoptlinks.styleonload();

/*
	Add welcome message to CAMP page header (MB Template only)
*/

if (typeof(cdc.appswelcome) == 'undefined'){
   cdc.appswelcome = new Object();
}

cdc.appswelcome.init = function () {
	
	if (jQuery('#fw-ft-basic').length) {
		if (typeof(cdc.appswelcome.greeting) == 'undefined') {
			cdc.appswelcome.greeting = 'Welcome,';
		}
		// for 1.x templates, this will replace "Logged In" with Welcome message
		if (jQuery('div.ft-welcome').length) {
			jQuery('div.ft-welcome').replaceWith('<div class="ft-sect ft-welcome ft-active"><span id="cdc-loggedin-msg" class="ft-label loggedin">' + cdc.appswelcome.greeting +'&nbsp;<span class="ft-welcome-name">' + cdc.appswelcome.name + '</span></span></div>');
		}
		// for 2.0 templates, this will insert Welcome message as the first item before Account or Log Out
		else {
			jQuery('div.ft-logout').parent().prepend('<div class="ft-sect ft-welcome ft-active"><span id="cdc-loggedin-msg" class="ft-label loggedin">' + cdc.appswelcome.greeting +'&nbsp;<span class="ft-welcome-name">' + cdc.appswelcome.name + '</span></span></div>');
		}
	}
}

cdc.appswelcome.initOnLoad = function()
{
	jQuery(document).ready(cdc.appswelcome.init);
}

/*
	Add optional parameter to Logout URL for CAMP (MB template only)
*/

if (typeof(cdc.appslogout) == 'undefined'){
   cdc.appslogout = new Object();
}


cdc.appslogout.init = function () {

	if (jQuery("#fw-ft-basic").length) {
		var campRedirect = '';
		if (jQuery("div.ft-logout a").attr('href').indexOf('?locale') > -1) {
			campRedirect = '&redirectTo=' + cdc.appslogout.url;
		}
		else {
			campRedirect = '?redirectTo=' + cdc.appslogout.url;
		}
		jQuery("div.ft-logout a").attr('href', function() {
			return this + campRedirect;
		});	

	}
}

cdc.appslogout.initOnLoad = function()
{
	jQuery(document).ready(cdc.appslogout.init);
}
