function gNavRollOver(obj, state) {
  obj.style.backgroundColor = (state == 'on') ? '#F8F4E0' : 'transparent';
}

function navRollOver(obj, state, mstyle) {
  document.getElementById(obj).className = (state == 'on') ? 'nav-highlight' : mstyle;
}
function closeRefresh(){
	opener.location.reload();
	window.close();
}
function go(url){
	parent.location=url;
}
function userPop(mjobid, refresh, url, mwidth, mheight){
	if(!url)url='jobgroup.php?action=invite&pop=true&jobid=' + mjobid;
	if(!mwidth)mwidth = 800;
	if(!mheight)mheight = 450;
	featureString='scrollbars,width='+mwidth+',height='+mheight;
	window.open(url,'admin',featureString);

}
function goSearch(){
	msearch=document.msearch1.search.value;
	if(msearch!='Search'&&msearch!='')
		document.forms.msearch1.submit()
	else
		alert('Please enter a search term or Task Id');
}
function clearSearch(){
	msearch=document.msearch1.search.value;
	if(msearch=='Search'||msearch=='')
		document.msearch1.search.value='';

}

function uploadButton(elementId, size, buttonText){
	mButton=document.getElementById(elementId);
	var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;    // true if we're on ie
	if(isIE)
		mButton.outerHTML='<span class=\"submitDiv loadingButton\" style=\''+size+'\'>'+buttonText+'</span>';
	else
		mButton.innerHTML=buttonText;
}

//flag to show whehter a toggle has happened
var toggleFlag="unset";
var mDiv="";
var mState="";
function showHide(szDivID, iState, displayType) {

	//alert("szDivID="+szDivID+", iState="+iState+", displayType="+displayType);

	if(displayType==null) displayType="block"

	//set basic match
    if(iState==1)
    	viewState = displayType;
    if(iState==0)
    	viewState = "none";

    //check for toggle
    if(mDiv==szDivID){
		if(mState==1){
			viewState = "none";
			iState=0
		}
		if(mState==0){
			viewState = displayType;
			iState=1
		}
	}
    //save inital request
    mDiv=szDivID;
    mState=iState;
    //alert('view:'+szDivID + " " +viewState)
    if(document.layers)	   //NN4+
    {
       document.layers[szDivID].style.display= viewState;
       toggleFlag=toggleFlag?false:true;

    }
    else if(document.getElementById)	  //gecko(NN6) + IE 5+
    {
        var obj = document.getElementById(szDivID);
        obj.style.display = viewState;
        toggleFlag=toggleFlag?false:true;
    }
    else if(document.all)	// IE 4
    {
        document.all[szDivID].style.display = viewState;
        toggleFlag=toggleFlag?false:true;

    }
}
function ajaxPost(strURL, divId, vars) {

	var xmlHttpReq = false;
	var self = this;

	// Mozilla/Safari
	if (window.XMLHttpRequest) {
		self.xmlHttpReq = new XMLHttpRequest();
	}
	// IE
	else if (window.ActiveXObject) {
		self.xmlHttpReq = new ActiveXObject("Microsoft.XMLHTTP");
	}
	self.xmlHttpReq.open('GET', strURL, true);
	self.xmlHttpReq.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

	self.xmlHttpReq.onreadystatechange = function() {

		if (self.xmlHttpReq.readyState == 4) {
			//opacity(divId, 20, 100, 1000)//fade in
			//alert(self.xmlHttpReq.responseText)
			updatepage(self.xmlHttpReq.responseText, divId);
		}
	}
	self.xmlHttpReq.send(vars);
}
function updatepage(str, divId){

	if(divId=='mtable'){
		addRow(divId)
	}else {
		//opacity(divId, 100, 0, 0)
		//newdiv = document.createElement("div");
		//alert('divId: '+divId)
		//alert('updatepage str='+str)
		document.getElementById(divId).innerHTML = str;
		//document.getElementById(divId).innerHTML = "hi";
	}
}
function addRow(id){
	var tbody = document.getElementById
	(id).getElementsByTagName("TBODY")[0];
	var row = document.createElement("TR")
	var td1 = document.createElement("TD")
	td1.appendChild(document.createTextNode("column 1"))
	var td2 = document.createElement("TD")
	td2.appendChild (document.createTextNode("column 2"))
	row.appendChild(td1);
	row.appendChild(td2);
	tbody.appendChild(row);
}
function opacity(id, opacStart, opacEnd, millisec) {
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;
    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    } else if(opacStart < opacEnd) {
    	//hide item first
    	changeOpac(0, id)
    	//show with style
    	var mObject = document.getElementById(id).style;
    	mObject.visibility="visible";
    	//show with filters
        for(i = opacStart; i <= opacEnd; i++)
            {
            //i+=i+2;
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
    }
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
}
//resize text area
function sz(t) {
//alert('this='+t)
a = t.value.split('\n');
b=1;
for (x=0;x < a.length; x++) {
 if (a[x].length >= t.cols) b+= Math.floor(a[x].length/t.cols);
 }
b+= a.length;
if (b > t.rows) t.rows = b;
}

// validate date: dd/mm/yyyy
function validateDate(da) {
    var RegExPattern = /^((((0?[1-9]|[12]\d|3[01])[\.\-\/](0?[13578]|1[02])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|[12]\d|30)[\.\-\/](0?[13456789]|1[012])[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|((0?[1-9]|1\d|2[0-8])[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?\d{2}))|(29[\.\-\/]0?2[\.\-\/]((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00)))|(((0[1-9]|[12]\d|3[01])(0[13578]|1[02])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|[12]\d|30)(0[13456789]|1[012])((1[6-9]|[2-9]\d)?\d{2}))|((0[1-9]|1\d|2[0-8])02((1[6-9]|[2-9]\d)?\d{2}))|(2902((1[6-9]|[2-9]\d)?(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00)|00))))$/;
    return ((da.match(RegExPattern)) && (da!=''));
}

// sprintf implementation
function sprintf() {
if (!arguments || arguments.length < 1 || !RegExp) { return; }
var str = arguments[0];
var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
var a = b = [], numSubstitutions = 0, numMatches = 0;
while (a = re.exec(str)) {
var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
var pPrecision = a[5], pType = a[6], rightPart = a[7]; numMatches++;
if (pType == '%') {
subst = '%';
} else {
numSubstitutions++;
if (numSubstitutions >= arguments.length) {
alert('Error! Not enough function arguments (' +
(arguments.length - 1) + ', excluding the string)\n' +
'for the number of substitution parameters in string (' +
numSubstitutions + ' so far).');
}
var param = arguments[numSubstitutions];
var pad = '';
if (pPad && pPad.substr(0,1) == "'") {
pad = leftpart.substr(1,1);
} else if (pPad) {
pad = pPad;
}
var justifyRight = true;
if (pJustify && pJustify === "-") justifyRight = false;
var minLength = -1;
if (pMinLength) minLength = parseInt(pMinLength);
var precision = -1;
if (pPrecision && pType == 'f') {
precision = parseInt(pPrecision.substring(1));
}
var subst = param;
switch (pType) {
case 'b': subst = parseInt(param).toString(2); break;
case 'c': subst = String.fromCharCode(parseInt(param)); break;
case 'd': subst = parseInt(param)? parseInt(param) : 0; break;
case 'u': subst = Math.abs(param); break;
case 'f': subst = (precision > -1)?
Math.round(parseFloat(param) * Math.pow(10, precision)) /
Math.pow(10, precision) : parseFloat(param); break;
case 'o': subst = parseInt(param).toString(8); break;
case 's': subst = param; break;
case 'x': subst = ('' +
parseInt(param).toString(16)).toLowerCase(); break;
case 'X': subst = ('' +
parseInt(param).toString(16)).toUpperCase(); break;
}
var padLeft = minLength - subst.toString().length;
if (padLeft > 0) {
var arrTmp = new Array(padLeft+1);
var padding = arrTmp.join(pad?pad:" ");
} else {
var padding = ""; } }
str = leftpart + padding + subst + rightPart;
}
return str;
}

/**
*
* Javascript sprintf
* http://www.webtoolkit.info/
*
*
**/

sprintfWrapper = {

    init : function () {

        if (typeof arguments == "undefined") { return null; }
        if (arguments.length < 1) { return null; }
        if (typeof arguments[0] != "string") { return null; }
        if (typeof RegExp == "undefined") { return null; }

        var string = arguments[0];
        var exp = new RegExp(/(%([%]|(\-)?(\+|\x20)?(0)?(\d+)?(\.(\d)?)?([bcdfosxX])))/g);
        var matches = new Array();
        var strings = new Array();
        var convCount = 0;
        var stringPosStart = 0;
        var stringPosEnd = 0;
        var matchPosEnd = 0;
        var newString = '';
        var match = null;

        while (match = exp.exec(string)) {
            if (match[9]) { convCount += 1; }

            stringPosStart = matchPosEnd;
            stringPosEnd = exp.lastIndex - match[0].length;
            strings[strings.length] = string.substring(stringPosStart, stringPosEnd);

            matchPosEnd = exp.lastIndex;
            matches[matches.length] = {
                match: match[0],
                left: match[3] ? true : false,
                sign: match[4] || '',
                pad: match[5] || ' ',
                min: match[6] || 0,
                precision: match[8],
                code: match[9] || '%',
                negative: parseInt(arguments[convCount]) < 0 ? true : false,
                argument: String(arguments[convCount])
            };
        }
        strings[strings.length] = string.substring(matchPosEnd);

        if (matches.length == 0) { return string; }
        if ((arguments.length - 1) < convCount) { return null; }

        var code = null;
        var match = null;
        var i = null;

        for (i=0; i<matches.length; i++) {

            if (matches[i].code == '%') { substitution = '%' }
            else if (matches[i].code == 'b') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(2));
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'c') {
                matches[i].argument = String(String.fromCharCode(parseInt(Math.abs(parseInt(matches[i].argument)))));
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'd') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'f') {
                matches[i].argument = String(Math.abs(parseFloat(matches[i].argument)).toFixed(matches[i].precision ? matches[i].precision : 6));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'o') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(8));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 's') {
                matches[i].argument = matches[i].argument.substring(0, matches[i].precision ? matches[i].precision : matches[i].argument.length)
                substitution = sprintfWrapper.convert(matches[i], true);
            }
            else if (matches[i].code == 'x') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
                substitution = sprintfWrapper.convert(matches[i]);
            }
            else if (matches[i].code == 'X') {
                matches[i].argument = String(Math.abs(parseInt(matches[i].argument)).toString(16));
                substitution = sprintfWrapper.convert(matches[i]).toUpperCase();
            }
            else {
                substitution = matches[i].match;
            }

            newString += strings[i];
            newString += substitution;

        }
        newString += strings[i];

        return newString;

    },

    convert : function(match, nosign){
        if (nosign) {
            match.sign = '';
        } else {
            match.sign = match.negative ? '-' : match.sign;
        }
        var l = match.min - match.argument.length + 1 - match.sign.length;
        var pad = new Array(l < 0 ? 0 : l).join(match.pad);
        if (!match.left) {
            if (match.pad == "0" || nosign) {
                return match.sign + pad + match.argument;
            } else {
                return pad + match.sign + match.argument;
            }
        } else {
            if (match.pad == "0" || nosign) {
                return match.sign + match.argument + pad.replace(/0/g, ' ');
            } else {
                return match.sign + match.argument + pad;
            }
        }
    }
}

xsprintf = sprintfWrapper.init;

function stripHTMLTags(h){
	return h.replace(/<\/?[^>]+>/gi,"");
}


function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}
function isIE(){

return /msie/i.test(navigator.userAgent) && !/opera/i.test(navigator.userAgent);

}

