//
// Master Javascript File
// All Basic functions...

//
// debugObjToStr - returns: string of Object properties formated for alert box
// debugObjToUL - returns: string of Object properties formated for UL
//
//
// toggleObj(String objectName)
// setObjectDisplay(Object object, boolean state)
// showObj(String objectName)
// hideObj(String objectName) - display:none - also takes array of objects
// 
// debugObj(Object object)
// breakOut(Object object)
//
// getCheckedValue(Object object)
// setCheckedValue(Object object)
//
// dateDiff(Date start, Date end)
// dateBreak(Date diff)


/*
ideas:
=======
drag n drop
minimise / maximise
attach top / bottom


*/

/********* Basics *********************************/

function $(objName){
	return document.getElementById(objName);
}


/***** set object display ************************/

function toggle(objName){
	obj = document.getElementById(objName);	
	obj.style.display = (obj.style.display == 'none' || obj.style.display == '')?"block":"none";
}

//set display for object based on boolean state (true=displayed)
//
function setObjDisplay(obj,state){
	if(state){
		obj.style.display = "block";
	}else{
		obj.style.display = "none";
	}
}

function showObj(objName){
	obj = document.getElementById(objName);	
	setObjDisplay(obj,true);
}

function hideObj(objName){
	obj = document.getElementById(objName);	
	setObjDisplay(obj,false);
}




/***** obj debugging ************************/

function debugObj(obj){
    	var str = breakOut(obj);
        document.getElementById("debug").innerHTML += "<hr>" + str + "<br>";
}

function breakOut(obj){
	var str = "<ul>";
	for(prop in obj){
		str += "<li>" + prop + ":";
		if(typeof obj[prop] == "object"){
			str += breakOut(obj[prop]);
		}else{
			str += obj[prop];
		}
	}
	str += "</li></ul>";
	return str;
}


/******* RadioButtons get and set *************************************/

// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
function setCheckedValue(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}


/******* date functions *************************/
    var    one_millisec    = 1;
    var    one_second      = one_millisec * 1000;
    var    one_minute      = one_second * 60;
    var    one_hour        = one_minute * 60;
    var    one_day         = one_hour * 24;
    var    one_week        = one_day * 7;
    var    one_year        = one_week * 52;
	
	function dateDiff(start, end){
		return dateBreak(end - start);
	}
	
    //use modulus to break date into parts
    function dateBreak(diff){
        rObj = new Object();
        rObj.years          = Math.floor(diff/one_year);
        diff = diff % one_year;
        rObj.weeks          = Math.floor(diff/one_week);
        diff = diff % one_week;
        rObj.days           = Math.floor(diff/one_day);
        diff = diff % one_day;
        rObj.hours          = Math.floor(diff/one_hour);
        diff = diff % one_hour;
        rObj.minutes        = Math.floor(diff/one_minute);
        diff = diff % one_minute;
        rObj.seconds        = Math.floor(diff/one_second);
        diff = diff % one_second;
        rObj.milliseconds   = Math.floor(diff/one_millisec);
        return rObj;
    }
	
	