//version 0.3c

//Options Variable
var webCal_showStatus; //  1 shows 'Loading...' , while waiting to update the calendar.  0 does not
var webCal_base_url; // the baseurl for which the calendar lives
var webCal_showArrows; // 0 show arrows above, 1 shows previous and next arrows below, 2 does not show arrows
var webCal_refreshDelay; // number of minutes to delay before updating calendar. 0 means no update
var webCal_updated_minical;
var webCal_login_check;
var webCal_ext_tt = 0;
var webCal_defaultNUC = "";
var webCal_site_url = "";
var webCal_pass = "";
var webCal_login  = "";

//Internal Variables
var webCal_req; 
var webCal_date_prev = "";
var webCal_date_next = "";
var webCal_req_login = null;

//helper functions to set the values of the options variable when
//calling show_minical from webCalendar.php
function webCal_set_refreshDelay(delay) {
    webCal_refreshDelay = delay;
}


function webCal_set_baseURL(url) {
    webCal_base_url = url;
}

function webCal_set_siteURL(url) {
    webCal_site_url = url;
}


function webCal_set_pass(val) {
	webCal_pass = val;
}

function webCal_set_ext_tt(val) {
	webCal_ext_tt = val;
}

function webCal_set_login(val) {
	webCal_login = val;
}






function webCal_set_showArrows(show) {
    webCal_showArrows = show;
}

function webCal_set_showStatus(show) {
    webCal_showStatus = show;
}

function webCal_set_defaultNUC(val) {
    webCal_defaultNUC = val;
}

function webCal_set_updatedMinical(val){
    webCal_updated_minical = val;
}

function webCal_set_loginCheck(val) {
    webCal_login_check = val;
}





//function to process the raw html received from minicalendar.php
//into a usable form

function webCal_process_Calendar(resp) {
    var title_cage = document.getElementById('webCal_title_cage');
    if (!webCal_updated_minical) {	
	pos = resp.search(/<table/); 
	resp  = resp.substring(pos);
	resp = resp.replace(/<\/body>/,'');
	resp = resp.replace(/<\/html>/,'');
        if (webCal_showArrows != 2 ) {
		var re = new RegExp('(<a title.*$)','mg');
		var pieces  =  resp.split(re);
		resp = pieces[0] + pieces[4];
		resp = resp.replace(/href=\"/g,'href="' + webCal_base_url); 
		webCal_date_prev=pieces[1].match(/date=\d*/);
		pieces[1] = pieces[1].replace(/src=\"/,'src="' + webCal_base_url); 
		pieces[1] = pieces[1].replace(/href=\"\S*?\"/,
				      'href="javascript:webCal_display_minical_prev()"' );
		webCal_date_next=pieces[3].match(/date=\d*/);
		pieces[3] = pieces[3].replace(/src=\"/,'src="' + webCal_base_url); 
		pieces[3] = pieces[3].replace(/href=\"\S*?\"/,
				      'href="javascript:webCal_display_minical_next()"' );
		resp = resp.replace(/<\/tbody>/,
			    '<tr id="arrows"><td colspan="2">'
			    + pieces[1] 
			    + '</td><td></td><td></td><td></td><td colspan="2">' 
			    + pieces[3] 
			    + '</td></tr></tbody>');
        } else {
	    resp = resp.replace(/^<a title=\"Previous\".+$/m,'');
    	    resp = resp.replace(/^<a title=\"Next\".+$/m,'');
        }
    } else {
	if (webCal_showArrows != 2 ) { 
		var pcs = resp.split(/<tr\s*id='arrows'>/);
		var   dates = pcs[1].match(/(date=\d+)/mg); 
		webCal_date_prev = dates[0]; 
		webCal_date_next = dates[1]; 
		pcs[1] = pcs[1].replace(/class="prev" href="minical.php\?date=\d+"/m,
					  "class='prev' href='javascript:webCal_display_minical_prev()'"); 
	    	pcs[1] = pcs[1].replace(/class="next" href="minical.php\?date=\d+"/m,
					  "class='prev' href='javascript:webCal_display_minical_next()'");
	    	pcs[1] = pcs[1].replace(/src=\"/mg,"src=\"" + webCal_base_url); 
	    	resp = pcs[0] + "<tr id='arrows'>" + pcs[1];
	}

	resp = resp.replace(/href=\"/g,'href="' + webCal_base_url ); 
    }
    if (title_cage != null) {  //user wants to put the month/year someplace else
	resp = resp.replace(/<tr class="monthnav"><th colspan="7">/,'');
	var temp_date  = resp.match(/^(.*?)<\/th><\/tr>$/m)[1];
	title_cage.innerHTML  = temp_date;
	resp = resp.replace(/^.*?<\/th><\/tr>$/m,'');
    } 
    resp = resp.replace(/&nbsp;/g,'&#x000A0;');  //XML does not like  non-breaking spaces
//    resp = resp.replace(/nulogin.php\?login=__\w+__+&amp;return_path=/g,'');  //kludge to avoid a minical.php error... 
    resp = resp.replace(/Sun/,'S');
    resp = resp.replace(/Mon/,'M');
    resp = resp.replace(/Tue/,'T');
    resp = resp.replace(/Wed/,'W');
    resp = resp.replace(/Thu/,'R');
    resp = resp.replace(/Fri/,'F');
    resp = resp.replace(/Sat/,'S');
    resp = '<center>' + resp + '</center>';
    return resp;
}


//function to display the calendar
function webCal_processReqChange()  {
    // only if req shows "complete"
    if (webCal_req.readyState == 4) {
	// only if "OK"
        var cage = document.getElementById('webCal_cage');
	if (webCal_req.status == 200) {
	    var resp = webCal_req.responseText;
	    if (webCal_updated_minical) {
	       	cage.innerHTML = webCal_process_Calendar(resp);
	    } else {
	 	if (2 == resp.search(/<body\s*id=\"minical/)) {
			cage.innerHTML = "Invalid Minical";
	    	} else {
 	        	cage.innerHTML = webCal_process_Calendar(resp);
         	}
	   }
   	   if (webCal_refreshDelay > 0) {
		    setTimeout('webCal_display_minical_curr()',webCal_refreshDelay*60*1000);
   	   }
	} else {
	    cage.innerHTML = webCal_req.statusText;
	}

    }
}



//internal functions for  updating which calendar is displayed
function webCal_display_minical_curr() {
    if (webCal_showStatus) {
	document.getElementById('webCal_cage').innerHTML="Loading...";
    }
    webCal_display_minical('');
}

function webCal_display_minical_prev() {
    if (webCal_showStatus) {
	document.getElementById('webCal_cage').innerHTML="Loading...";
    }
    webCal_display_minical(webCal_date_prev);
}

function webCal_display_minical_next() {
    if (webCal_showStatus) {
	document.getElementById('webCal_cage').innerHTML="Loading...";
    }
    webCal_display_minical(webCal_date_next);
}


function webCal_login_process() {
    // only if req shows "complete"
    if (webCal_req_login.readyState == 4) {
	// only if "OK"
        var cage = document.getElementById('webCal_cage');
	if (webCal_req_login.status == 200) {
	    if (webCal_showStatus) {
		document.getElementById('webCal_cage').innerHTML="Loading..";
	    }
	    webCal_display_minical_curr();
	} else {
	    alert(webCal_req_login.statusText);
	}
   }
}	

function webCal_start_login() {
     url = webCal_base_url + 'login.php';
    if (webCal_showStatus) {
	document.getElementById('webCal_cage').innerHTML="Logging in...";
    }
     if (window.XMLHttpRequest) { 
	webCal_req_login = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) {  //for IE/Windows ActiveX version 
	webCal_req_login = new ActiveXObject("Microsoft.XMLHTTP");  
    }
    if (webCal_req_login){
        webCal_req_login.onreadystatechange = webCal_login_process;
	webCal_req_login.open('POST',url,true);
	webCal_req_login.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
	webCal_req_login.send("login=" + webCal_login + "&password=" + webCal_pass);
    }else {
	alert ('Cannot login');
    }
}


//make the http request to minical and assign the handler
function webCal_display_minical(date) {     //for native XMLHttpRequest object 
    var url;
    url = webCal_base_url + 'minical.php';
    if (webCal_updated_minical) {
	url = url + '?snippet=1&forceCSS=' + webCal_ext_tt + '&loginCheck=' + webCal_login_check;
	url = url  +  '&arrows=' + webCal_showArrows;
	if (date) {
	 	 url =  url + '&' + date; 
	}
	if (webCal_defaultNUC) {
	        url = url + '&user='  + webCal_defaultNUC;
	}
    } else{ 	
     	if (date) {
	 	 url =  url + '?' + date; 
		if (webCal_defaultNUC) {
		        url = url + '&user='  + webCal_defaultNUC;
		}
  	 } else {
		if (webCal_defaultNUC) {
		        url = url + '&user='  + webCal_defaultNUC;
		}
	}
    }
    try {
	webCal_req = null;
	if (window.XMLHttpRequest) { 
	    webCal_req = new XMLHttpRequest(); 
	} else if (window.ActiveXObject) {  //for IE/Windows ActiveX version 
	    webCal_req = new ActiveXObject("Microsoft.XMLHTTP"); 
	}
	webCal_req.onreadystatechange = webCal_processReqChange;
	webCal_req.open("GET",url,true);
	if (window.XMLHttpRequest) { 
	    webCal_req.send(null); 
	} else {
	    webCal_req.send(); 
	}
    } catch (e) {
	alert(e);
    }
}


