/* 

	Filename: bottombar.js
	Date Created: April 28, 2008
	Author: Rommil Santiago (rommil.santiago@concordia.ca)
	
	Instructions:
	TBD.

*/

/* AJAX Tom-foolery ----------------------- */

/* Globals */

var req = -1;
var req_AZ = -1;
var responsedata;
var newsdata;
var newsdata_last;
var newsdata_raw = new Array();
var jsondata = new Array();
var CBB_show_flag = true;
var j;
var CBB_timer;
var baseURL;

/* Menu status flags */

var bookmarks_menu_open = false;
var quicklinks_menu_open = false;
var settings_menu_open = false;

var newsstory = -1;
var audiencedata;
var emergency_flag = false;

function bottomBar(URL){
	
	/* Init */

	var bottombar;
	var bottombar_holder;
	var bottombar2;
	
	var footer_links;
	var footer_links_parent;
	var cookiedata = readCookie('ConcordiaBottomBar');

	baseURL = URL;
	
	addstyles(); // attach the stylesheets	
	
	bottombar = document.createElement("div");
	bottombar.id = 'bottombar_holder';
	bottombar.innerHTML='<div id="CBB"><div id="bottombar"><ul><li id="CBB_quicklinks"><a href="javascript:showquicklinks();">Quicklinks</a></li><li id="CBB_bookmarks"><a href="javascript:CBB_showbookmarks();">Bookmarks</a> <a href="javascript:addbookmark();" title="Add this page to your bookmarks"><img src="/globalmk/images/common/CBB_add.gif" width="10" height="10" alt="+" style="margin-bottom:-1px; margin-left:5px;"/></a></li><li><a href="javascript:last();" id="CBB_last"><img src="/globalmk/images/common/CBB_last.gif" height="9" width="9" alt="Last"/></a> <a href="javascript:next();" id="CBB_next"><img src="/globalmk/images/common/CBB_next.gif" alt="Next" height="9" width="9" /></a>&nbsp;<span id="CBB_news"></span></li><!--<li id="CBB_settings"><a href="javascript:settings();">Settings</a></li>--></ul></div></div>';
	document.body.appendChild(bottombar);
	
	
	if (!cookiedata){
		createCookie('ConcordiaBottomBar', '', 365, 'concordia.ca');
	}
	
	bottombar_holder = document.getElementById("bottombar_holder");
	bottombar_holder.className = 'normal';
	bottombar2 = document.getElementById("bottombar"); // Left part of the bar
		
	newsfeed(); // Load the news	
	
	// Remove footer links from static code
	
	if (document.getElementById("footer_links")){
		footer_links = document.getElementById("footer_links");
		footer_links_parent = footer_links.parentNode;
		footer_links_parent.removeChild(footer_links);
	}
	
}

function addstyles(){
	if(document.createStyleSheet) {
		
		var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;
		var gteIE7 = false /*@cc_on || @_jscript_version >= 5.7 @*/;
	
		document.createStyleSheet('/globalmk/stylesheets/CBB.css');
		if (gteIE7)
			document.createStyleSheet('/globalmk/stylesheets/CBB_ie7.css');
		else if (IE6)
			document.createStyleSheet('/globalmk/stylesheets/CBB_ie6.css');
	} else {
		var styles = "@import url(' /globalmk/stylesheets/CBB.css ');";
		var newSS = document.createElement('link');
		newSS.rel='stylesheet';
		newSS.href='data:text/css,' + escape(styles);
		document.getElementsByTagName("head")[0].appendChild(newSS);
	}
}

/* Refresh */

function refreshbar(){
	var todelete;
	var bottombar_parent;
	
	todelete = document.getElementById("bottombar_holder");
	bottombar_parent = todelete.parentNode;
	
	clearTimeout(CBB_timer);
	CBB_timer = 0;
	
	bottombar_parent.removeChild(todelete);


	bottomBar(baseURL);

}

/* News */

function loadXMLDoc(url) {

	req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			req = new XMLHttpRequest();
        } catch(e) {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req = false;
        	}
		}
    }
	if(req) {
		req.onreadystatechange = processReqChange;
		req.open("GET", url, true);
		req.send("");
		return true;
	}

}

function processReqChange() {   

    var i;
    if (req.readyState == 4) {
      
        if (req.status == 200) {
        	       		
        			jsondata = eval('(' + req.responseText + ')'); 
        		
					// Parse
					for (i = 0; i < jsondata.newsitem.length; i ++){
						if (jsondata.newsitem[i].priority != -1){
							emergency_flag = false;
							//newsstory = 0;
						}else{
							emergency_flag = true;
							newsstory = i;
						}
					}
        		newsdata_fetch();
        	
        } else {
            //alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
    }
}

/* AZ */

function loadXMLDoc_AZ(url) {

	req_AZ = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) {
    	try {
			req_AZ = new XMLHttpRequest();
        } catch(e) {
			req_AZ = false;
        }
    // branch for IE/Windows ActiveX version
    } else if(window.ActiveXObject) {
       	try {
        	req_AZ = new ActiveXObject("Msxml2.XMLHTTP");
      	} catch(e) {
        	try {
          		req_AZ = new ActiveXObject("Microsoft.XMLHTTP");
        	} catch(e) {
          		req_AZ = false;
        	}
		}
    }
	if(req_AZ) {
		req_AZ.onreadystatechange = processReqChange_AZ;
		req_AZ.open("GET", url, true);
		req_AZ.send("");
		return true;
	}

}

function processReqChange_AZ() {   

    var i;
    var azlisting;
    if (req_AZ.readyState == 4) {
      
        if (req_AZ.status == 200) {
        	azlisting = document.getElementById("azlisting");
        	azlisting.innerHTML = req_AZ.responseText;

        	
        } else {
            //alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
    }
}




function settings(){
	var CBB_write_data;
	var CBB_read_data = readCookie("ConcordiaBottomBar_settings");
	
	var settings_content;
	var showsettings = document.createElement("div");

	var CBB_settings;
	// Open Settings panel
	

	settings_content = '<li>Hide this toolbar</li>';
	
	showsettings.id = 'CBB_showsettings';
	showsettings.innerHTML='<h3>Settings</h3><ul style="padding-left:14px;"><li style="display:list-item;text-align:right;"><a href="javascript:closesettings();">Close</a></li>'+settings_content+'</ul>';
	if (!quicklinks_menu_open)
		document.body.appendChild(showsettings);
	settings_menu_open = true;
	
	// Highlight bookmarks tab
	CBB_settings = document.getElementById("CBB_settings");
	CBB_settings.style.fontWeight = 'bold';
	CBB_settings.style.backgroundColor = "#FFF";
	CBB_settings.getElementsByTagName("a")[0].style.color = "#922338";
	
	//createCookie('ConcordiaBottomBar_settings', CBB_write_data, 365);
}


function closesettings(){
	var todelete;
	var todelete_parent;
	var CBB_settings;
	
	if (settings_menu_open){
		todelete = document.getElementById("CBB_showsettings");
		todelete_parent = todelete.parentNode;
		todelete_parent.removeChild(todelete);
		settings_menu_open = false;
	}

	CBB_settings = document.getElementById("CBB_settings");
	CBB_settings.style.fontWeight = 'normal';
	CBB_settings.style.backgroundColor = "transparent";
	CBB_settings.getElementsByTagName("a")[0].style.color = "#FFF";
}

function newsdata_fetch(){
	var snip;
	if (jsondata.length != 0){	
		if (jsondata.newsitem[newsstory].title.length > 50)
			snip = jsondata.newsitem[newsstory].title.substr(0,50) + '...';
		else
			snip = jsondata.newsitem[newsstory].title;
	
	newsdata = '<strong>Headlines:</strong> <a href="'+jsondata.newsitem[newsstory].url+'#referID=CBB" title="' + jsondata.newsitem[newsstory].title + '">' + snip + '</a>';
	}else{
		newsdata = '<strong>Loading Newsfeed... ';	
	}
	

}

function newsdata_write(){

	var CBB_news;
	if (newsdata_last != newsdata){

		CBB_news = document.getElementById("CBB_news");
		
		//var fade_out = fade('CBB_news', 1000, 100, 0);

		
		//if (fade_out < 0){
			CBB_news.innerHTML = newsdata;// + '(' + audiencedata + ' selected)';
	//		fade('CBB_news', 1000, 0, 100);
		//}
		
		
		
	}
	newsdata_last = newsdata;
}


/* Newsfeed ---------------------- */

function last(){
	
	newsstory = newsstory -1;
	if (newsstory < 0)
		newsstory = 4;
	
	newsdata_fetch();
	newsdata_write();
	
	clearTimeout(CBB_timer);
	CBB_timer = 0;
	
	CBB_timer = setTimeout("newsfeed()", 1000);
}

function next(){

	newsstory = newsstory  + 1;
	if (newsstory > 4)
		newsstory = 0;
	
	newsdata_fetch();
	newsdata_write();
	
	clearTimeout(CBB_timer);
	CBB_timer = 0;
	
	CBB_timer = setTimeout("newsfeed()", 1000);
}

function newsfeed(){
	var CBB_news;
	var bottomBar_holder;	

	var rand_no = Math.random();

	rand_no = rand_no * 100;
	bottomBar_holder = document.getElementById("bottombar_holder");
	
	audiencedata = readCookie('audiencetab');
	
	loadXMLDoc('http://' + baseURL + '/scripts/CBB_newsfeed.php?randomnumber='+rand_no);
	
		
	CBB_news = document.getElementById("CBB_news");
	if (newsdata == null)
		CBB_news.innerHTML = '<em>Loading newsfeed...</em>';
	else
		newsdata_write();

	if (emergency_flag){
		if (bottomBar_holder.className != 'emergency'){
			emergencyalert();
		}
	}else if (bottomBar_holder.className != 'normal')
		normalstate();	

	if (emergency_flag)
		j = 0;
	
	
	if (j < 10){
	
		j = j + 1;
		
	}else{
		j = 0;

		newsstory = newsstory + 1;

		if (newsstory > 4)
			newsstory = 0;
			
		newsdata_fetch();
		newsdata_write();		
	}
	
	// Fetch feed
	CBB_timer = setTimeout("newsfeed()", 1000);
	
	

}

/* Emergency Alert ----------------- */

function emergencyalert(){
	var bottomBar_holder;
	var CBB;
	
	bottomBar_holder = document.getElementById("bottombar_holder");
	bottomBar_holder.className = 'emergency';
	
	CBB = document.getElementById("CBB");
	CBB.id = 'CBB_emergency';

}

function normalstate(){
	var bottomBar_holder;
	var CBB;
	
	bottomBar_holder = document.getElementById("bottombar_holder");
	bottomBar_holder.className = 'normal';
	
	CBB = document.getElementById("CBB_emergency");
	CBB.id = 'CBB';

}

/* Quicklinks ---------------------- */

function showquicklinks(){
	var quicklinks_content;
	var listing = '';
	var showquicklinks = document.createElement("div");
	var CBB_quicklinks;
	var azquery;
	var keycapture;
	var azquery_processed;
	var pattern;
	
	
	quicklinks_content = '<li><a href="http://welcome.concordia.ca">Connect2Concordia</a></li>';
	
	quicklinks_content = quicklinks_content + '<input type="text" name="query" id="azquery"/><div id="azlisting"></div>';
	
	
	showquicklinks.id = 'quicklink_menu';
	showquicklinks.innerHTML='<h3>Quicklinks</h3><ul style="padding-left:14px;"><li style="display:list-item;text-align:right;"><a href="javascript:closequicklinks();">Close</a></li>'+quicklinks_content+'</ul>';
	if (!quicklinks_menu_open)
		document.body.appendChild(showquicklinks);
	quicklinks_menu_open = true;
	
	// Highlight bookmarks tab
	CBB_quicklinks = document.getElementById("CBB_quicklinks");
	CBB_quicklinks.style.fontWeight = 'bold';
	CBB_quicklinks.style.backgroundColor = "#FFF";
	CBB_quicklinks.getElementsByTagName("a")[0].style.color = "#922338";
	closebookmarks();
	
	// Query the AZ listing
	
	// 1st load
	loadXMLDoc_AZ('http://' + baseURL + '/scripts/CBB_newsfeed.php?az=1&query=');	
	azquery = document.getElementById("azquery");

	azquery.onkeyup = function(){
		azquery_processed = azquery.value;
		
		pattern = / /g;
		azquery_processed = azquery_processed.replace(pattern, ".");
		loadXMLDoc_AZ('http://' + baseURL + '/scripts/CBB_newsfeed.php?az=1&query=' + azquery_processed);	
		};
	
}

function gotoanchor(anchor){

	var anchor;
	var offset;
	anchor = $(anchor)
	offset = anchor.offsetTop - $(anchor).parentNode.offsetTop;

	$(anchor).parentNode.scrollTop = offset;

}

function closequicklinks(){
	var todelete;
	var todelete_parent;
	var CBB_quicklinks;
	
	if (quicklinks_menu_open){
		todelete = document.getElementById("quicklink_menu");
		todelete_parent = todelete.parentNode;
		todelete_parent.removeChild(todelete);
		quicklinks_menu_open = false;
	}

	CBB_quicklinks = document.getElementById("CBB_quicklinks");
	CBB_quicklinks.style.fontWeight = 'normal';
	CBB_quicklinks.style.backgroundColor = "transparent";
	CBB_quicklinks.getElementsByTagName("a")[0].style.color = "#FFF";
}


/* Bookmarks ----------------------- */

function addbookmark(){
	var CBB_read_data;
	var history_exists = false;
	var split_count = new Array();
	CBB_read_data = readCookie("ConcordiaBottomBar");

	if (CBB_read_data != '' && CBB_read_data != null){
		split_count = CBB_read_data.split("$");
		history_exists = true;
	}

	if (history_exists && split_count.length > 9){
		alert("Sorry, your bookmarks are full");
	}else if (true){
		CBB_write_data = CBB_read_data + '$' + window.location + '*' + document.title.replace(" - Concordia University - Montreal, Quebec, Canada",'');
		createCookie('ConcordiaBottomBar', CBB_write_data, 365);
		alert(document.title.replace(" - Concordia University - Montreal, Quebec, Canada",'')+" added to bookmarks");
	}else{
		alert(document.title.replace(" - Concordia University - Montreal, Quebec, Canada",'')+" already exists in your saved bookmarks");
	}

	
	closebookmarks();
	showbookmarks_admin();


}

function deletebookmark(i){
	var CBB_read_data;
	var CBB_data_array = new Array();
	var CBB_write_data;
	var k;
	CBB_read_data = readCookie("ConcordiaBottomBar");
	CBB_data_array = CBB_read_data.split("$");
	
	for (k = 1; k < CBB_data_array.length ; k ++){
		if (k == i){
			CBB_data_array.splice(i,1);			
		}
	}
	CBB_write_data = CBB_data_array.join("$");
	createCookie('ConcordiaBottomBar', CBB_write_data, 365);
	closebookmarks();
	showbookmarks_admin();
	
}


function CBB_showbookmarks(){
	closebookmarks();

	var CBB_read_data = readCookie("ConcordiaBottomBar");
	var showbookmarks = document.createElement("div");
	var listing = '';
	var i;
	var CBB_bookmarks;

	// Highlight bookmarks tab
	CBB_bookmarks = document.getElementById("CBB_bookmarks");
	CBB_bookmarks.style.fontWeight = 'bold';
	CBB_bookmarks.style.backgroundColor = "#FFF";
	CBB_bookmarks.getElementsByTagName("a")[0].style.color = "#922338";
	
	if (CBB_read_data != '' && CBB_read_data != null && CBB_read_data != 'null'){

		var CBB_data_array = new Array();		
		CBB_data_array = CBB_read_data.split("$");

		for (i = 1; i < CBB_data_array.length; i++){

			var url = CBB_data_array[i].split("*")[0];
			var title = CBB_data_array[i].split("*")[1].replace(" - Concordia University - Montreal, Quebec, Canada",'');
						
			listing = listing + '<li style="display:list-item;" id="CBB_BM_' + i + '"><a href="'+url+'?referID=bottomBar" title="'+url+'">'+title+'</a></li>';
		}


	}else{
		var listing = '<li style="display:list-item;">No Bookmarks<li>';
	}	
	
	showbookmarks.id = 'bookmark_menu';
	showbookmarks.innerHTML='<h3>Bookmarks</h3><ul style="padding-left:14px;"><li style="display:list-item;text-align:right;"><a href="javascript:showbookmarks_admin();">Delete Bookmark(s)</a> | <a href="javascript:closebookmarks();">Close</a></li>'+listing+'</ul>';
	if (!bookmarks_menu_open)
		document.body.appendChild(showbookmarks);
	bookmarks_menu_open = true;
	
	
	closequicklinks();
}

function showbookmarks_admin(){

	closebookmarks();

	var CBB_read_data = readCookie("ConcordiaBottomBar");
	var showbookmarks = document.createElement("div");
	var listing = '';
	var i;
	var CBB_bookmarks;

	// Highlight bookmarks tab
	CBB_bookmarks = document.getElementById("CBB_bookmarks");
	CBB_bookmarks.style.fontWeight = 'bold';
	CBB_bookmarks.style.backgroundColor = "#FFF";
	CBB_bookmarks.getElementsByTagName("a")[0].style.color = "#922338";
	
	if (CBB_read_data != '' && CBB_read_data != null && CBB_read_data != 'null'){

		var CBB_data_array = new Array();		
		CBB_data_array = CBB_read_data.split("$");

		for (i = 1; i < CBB_data_array.length; i++){

			var url = CBB_data_array[i].split("*")[0];
			var title = CBB_data_array[i].split("*")[1].replace(" - Concordia University - Montreal, Quebec, Canada",'');
						
			listing = listing + '<li style="display:list-item;" id="CBB_BM_' + i + '"><a href="'+url+'?referID=bottomBar" title="'+url+'">'+title+'</a> [<a href="javascript:deletebookmark('+i+');" title="Delete this bookmark">Delete</a>]</li>';
		}


	}else{
		var listing = '<li style="display:list-item;">No Bookmarks<li>';
	}	
	
	showbookmarks.id = 'bookmark_menu';
	showbookmarks.innerHTML='<h3>Delete Bookmark(s)</h3><ul style="padding-left:14px;"><li style="display:list-item;text-align:right;"><a href="javascript:CBB_showbookmarks();">Cancel</a> | <a href="javascript:closebookmarks();">Close</a></li>'+listing+'</ul>';
	if (!bookmarks_menu_open){
		document.body.appendChild(showbookmarks);
	}
	bookmarks_menu_open = true;
	
	
	closequicklinks();
}

function closebookmarks(){
	var todelete;
	var todelete_parent;
	var CBB_bookmarks;

	if (document.getElementById("bookmark_menu")){
		todelete = document.getElementById("bookmark_menu");
		todelete_parent = todelete.parentNode;
		todelete_parent.removeChild(todelete);
		bookmarks_menu_open = false;
	}

	CBB_bookmarks = document.getElementById("CBB_bookmarks");
	CBB_bookmarks.style.fontWeight = 'normal';
	CBB_bookmarks.style.backgroundColor = "transparent";
	CBB_bookmarks.getElementsByTagName("a")[0].style.color = "#FFF";
}

// Fade effect

function changeOpacity(el,opacity) {
  var image = document.getElementById(el);
  // For Mozilla
  image.style.MozOpacity = (opacity / 100);
  // For IE
  image.style.filter = "alpha(opacity=" + opacity + ")";
  // For others
  image.style.opacity = (opacity / 100);
}

function fade(el,milli,start,end) {
  var fadeTime = Math.round(milli/100);
		
  var i = 0;  // Fade Timer
  // Fade in
  if(start < end) {
    for(k = start; k <= end; k++) {
      // define the expression to be called in setTimeout()
      var expr = "changeOpacity('" + el + "'," + k + ")";
      var timeout = i * fadeTime;
      // setTimeout will call 'expr' after 'timeout' milliseconds
      setTimeout(expr,timeout);
      i++;
    }
  }
  // Fade out
  else if(start > end) {
    for(k = start; k >= end; k--) {
      var expr = "changeOpacity('" + el + "'," + k + ")";
      var timeout = i * fadeTime;
      setTimeout(expr,timeout);
      i++;
    }
    
  }
}

function shiftOpacity(id, millisec) {
    //if an element is invisible, make it visible, else make it ivisible
    if(document.getElementById(id).style.opacity == 0) {
        opacity(id, 0, 100, millisec);
    } else {
        opacity(id, 100, 0, millisec);
    }
} 

