//
//	Javascript Tookbox
//
function popUp(URL, height, width) {		day = new Date();		id = day.getTime();		eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=0,location=0,statusbar=0,menubar=0,resizable=0,width="+ width +",height="+ height +",left = 312,top = 84');");	}


// Using element as parameter
function removeElement(elementToDelete){
    elementToDelete.parentNode.removeChild(elementToDelete);
}

function removeChildren(parentElement){
    if (parentElement.hasChildNodes){
        var children = elementBID('dcmsWindow').childNodes;
        var total = children.length;
        for (var i=total-1;0<=i;i--){
            removeElement(children[i]);
        }			
    }
}

function replaceElement(new_Element, old_Element){
    parent_Node = old_Element.parentNode;
    return parent_Node.replaceChild(new_Element, old_Element);
}

// Using elementID as parameter
function elementBID(id){
	return document.getElementById(id);
}


function removeElementBID(id){
    var elementToDelete = elementBID(id);
    removeElement(elementToDelete);
}

function removeChildrenBID(id){
    var parentElement = elementBID(id);
    removeChildren(parentElement);
}


function toggle_element(id){
    var element;
    if (element = elementBID(id)){
        if (element.style.display == 'none'){
            element.style.display = 'block';
        }else{
            element.style.display = 'none';
        }
    }
}

function toggle_open_closed(pairID){
    toggle_element(pairID+'_closed');
    toggle_element(pairID+'_open');
}

function toggle_setMember_display(setName, memberName){
			var set = document.getElementById(setName+'_set');
			var setMembers = set.childNodes;
			var total = setMembers.length;
			for (var i=0;i<total;i++){
				setMembers[i].style.display = 'none';
			}
			document.getElementById(setName+'_'+memberName).style.display = 'block';
		}
		
function toggle_setMember_class(setName, memberName){
			var set = document.getElementById(setName+'_set');
			var setMembers = set.childNodes;
			var total = setMembers.length;
			for (var i=0;i<total;i++){
				setMembers[i].className = 'off';
			}
			document.getElementById(setName+'_'+memberName).className = 'on';
		}
		
		
function setClass(id, className){
    var target = elementBID(id);    
    target.className = className; 
}

function toggle_class(id, className1, className2){
    var target = elementBID(id);      
    if (target.className == className1){
        target.className = className2;
    }else{
        target.className = className1;
    }    
}



// Other Functions

function loading(){
    var element;
    if (element = elementBID('loading'))
        element.style.display = 'block';
}

function loaded(){
    var element;
    if (element = elementBID('loading'))
        element.style.display = 'none';
}

function errorMessage(xmlData){
    if (xmlData.getElementsByTagName('code')[0].firstChild.data != 0)
    {
        //var alert = elementBID('messages');
        //alert.innerHTML = xmlData.getElementsByTagName('message')[0].firstChild.data;
        alert(xmlData.getElementsByTagName('message')[0].firstChild.data);
    }
}

function message(message){
    var alert = elementBID('messages');
    alert.innerHTML = message;
}


// Other Other functions

function getDaysInMonth(aDate){
   // returns the last day of a given month
    var m = new Number(aDate.getMonth());
    var y = new Number(aDate.getYear());

    var tmpDate = new Date(y, m, 28);
    var checkMonth = tmpDate.getMonth();
    var lastDay = 27;

    while(lastDay <= 31){
        temp = tmpDate.setDate(lastDay + 1);
        if(checkMonth != tmpDate.getMonth())
            break;
        lastDay++
    }
    return lastDay;
}
function dateFormat(aDate, displayPat){
    /********************************************************
    *   Valid Masks:
    *   !mmmm = Long month (eg. January)
    *   !mmm = Short month (eg. Jan)
    *   !mm = Numeric date (eg. 07)
    *   !m = Numeric date (eg. 7)
    *   !dddd = Long day (eg. Monday)
    *   !ddd = Short day (eg. Mon)
    *   !dd = Numeric day (eg. 07)
    *   !d = Numeric day (eg. 7)
    *   !yyyy = Year (eg. 1999)
    *   !yy = Year (eg. 99)
   ********************************************************/

    intMonth = aDate.getMonth();
    intDate = aDate.getDate();
    intDay = aDate.getDay();
    intYear = aDate.getFullYear();

    var months_long =  new Array ('January','February','March','April',
       'May','June','July','August','September','October','November','December')
    var months_short = new Array('Jan','Feb','Mar','Apr','May','Jun',
       'Jul','Aug','Sep','Oct','Nov','Dec')
    var days_long = new Array('Sunday','Monday','Tuesday','Wednesday',
       'Thursday','Friday','Saturday')
    var days_short = new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat')

    var mmmm = months_long[intMonth]
    var mmm = months_short[intMonth]
    var mm = intMonth < 9?'0'+ (1 + intMonth) + '':(1+intMonth)+'';
    var m = 1+intMonth+'';
    var dddd = days_long[intDay];
    var ddd = days_short[intDay];
    var dd = intDate<10?'0'+intDate+'':intDate+'';
    var d = intDate+'';
    var yyyy = intYear;

    century = 0;
    while((intYear-century)>=100)
        century = century + 100;

    var yy = intYear - century
    if(yy<10)
        yy = '0' + yy + '';

    displayDate = new String(displayPat);

    displayDate = displayDate.replace(/!mmmm/i,mmmm);
    displayDate = displayDate.replace(/!mmm/i,mmm);
    displayDate = displayDate.replace(/!mm/i,mm);
    displayDate = displayDate.replace(/!m/i,m);
    displayDate = displayDate.replace(/!dddd/i,dddd);
    displayDate = displayDate.replace(/!ddd/i,ddd);
    displayDate = displayDate.replace(/!dd/i,dd);
    displayDate = displayDate.replace(/!d/i,d);
    displayDate = displayDate.replace(/!yyyy/i,yyyy);
    displayDate = displayDate.replace(/!yy/i,yy);

    return displayDate;
}

function updateValue(target, modifier, value){
    t= elementBID(target);
    o_value = parseInt(t.getAttribute('value'));
    n_value = o_value;
    switch(modifier){
        case ('='):
            n_value = value;
            break;
    
        case('+'):
            n_value = o_value + value;
            break;
            
        case('-'):
            n_value = o_value - value;
            break;
            
        case('*'):
            n_value = o_value * value;
            break;
            
        case('/'):
            n_value = o_value / value;
            break;
    }
    t.setAttribute('value', n_value);
    t.replaceChild(document.createTextNode(n_value),t.firstChild);
}

function resourceStatus(resourceXML){
    pDate = resourceXML.getElementsByTagName('publishDate')[0].firstChild.data;
    aDate = resourceXML.getElementsByTagName('archiveDate')[0].firstChild.data;
    rDate = resourceXML.getElementsByTagName('retireDate')[0].firstChild.data;    
    pDate = new Date(pDate.substr(0,4),pDate.substr(5,2)-1,pDate.substr(8,2));
    aDate = new Date(aDate.substr(0,4),aDate.substr(5,2)-1,aDate.substr(8,2));
    rDate = new Date(rDate.substr(0,4),rDate.substr(5,2)-1,rDate.substr(8,2));
    today = new Date();
    
    var status = 'unknown';
    
    if ( today < pDate)
        status = 'unpublished';
         
    if ( (pDate <= today) && (today < aDate) )
        status = 'active';
        
    if ( (aDate <= today) && (today < rDate))
        status = 'archived';
        
    if (rDate <= today)
        status = 'retired';
        
    return status;
}

// Queue Class
function Queue(){
    this.array = new Array();
    this.head=0;
    this.tail=0;
}

Queue.prototype.reset = function(){
    this.array = null;
    this.array = new Array();
    this.head=0;
    this.tail=0;
}

Queue.prototype.push = function(value){
    var pointer = this.tail;
    this.tail++;
    this.array[pointer]=value;
}

Queue.prototype.pop = function(){
    if (this.head != this.tail){
        var pointer = this.head;
        var value = this.array[pointer];
        this.head++;
    }
    else{
        value = false;
    }
    if (this.head == this.tail)
        this.reset();
    return value;
}

Queue.prototype.peek = function(){
    return (this.tail-this.head);
}