// global variables //
var TIMER = 5;
var SPEED = 10;
var WRAPPER = 'content';

// calculate the current window width //
function pageWidth() {
  return window.innerWidth != null ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;
}

// calculate the current window height //
function pageHeight() {
  return window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
}

// calculate the current window vertical offset //
function topPosition() {
  return typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;
}

// calculate the position starting at the left of the window //
function leftPosition() {
  return typeof window.pageXOffset != 'undefined' ? window.pageXOffset : document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;
}



function _initDialog (  title, type, url, autohide, width )
{
	if(!type) 
	{
		type = 'error';
	}
	
	 var dialog;
	  var dialogheader;
	  var dialogclose;
	  var dialogtitle;
	  var dialogcontent;
	  var dialogmask;
	  
	  if(!document.getElementById('dialog')) 
	  {
	    dialog = document.createElement('div');
	    dialog.id = 'dialog';
	    dialogheader = document.createElement('div');
	    dialogheader.id = 'dialog-header';
	    dialogtitle = document.createElement('div');
	    dialogtitle.id = 'dialog-title';
	    dialogclose = document.createElement('div');
	    dialogclose.id = 'dialog-close'
	    dialogcontent = document.createElement('div');
	    dialogcontent.id = 'dialog-content';
	    dialogmask = document.createElement('div');
	    dialogmask.id = 'dialog-mask';
	    document.body.appendChild(dialogmask);
	    document.body.appendChild(dialog);
	    dialog.appendChild(dialogheader);
	    dialogheader.appendChild(dialogtitle);
	    dialogheader.appendChild(dialogclose);
	    dialog.appendChild(dialogcontent);;
	    dialogclose.setAttribute('onclick','hideDialog()');
	    dialogclose.onclick = hideDialog;
	  } 
	  else 
	  {
	    dialog = document.getElementById('dialog');
	    dialogheader = document.getElementById('dialog-header');
	    dialogtitle = document.getElementById('dialog-title');
	    dialogclose = document.getElementById('dialog-close');
	    dialogcontent = document.getElementById('dialog-content');
	    dialogmask = document.getElementById('dialog-mask');
	    dialogmask.style.visibility = "visible";
	    dialog.style.visibility = "visible";
	  }
	  
	  
	  if (width)
	  {
	  	dialog.style.width=width+'px';
	  	dialogheader.style.width=width-13+'px';
	  }
	  
	  dialog.style.opacity = .00;
	  dialog.style.filter = 'alpha(opacity=0)';
	  dialog.alpha = 0;
	  
	  var width = pageWidth();
	  var height = pageHeight();
	  var left = leftPosition();
	  var top = topPosition();
	  var dialogwidth = dialog.offsetWidth;
	  var dialogheight = dialog.offsetHeight;
	  var topposition = top + (height / 3) - (dialogheight / 2);
	  var leftposition = left + (width / 2) - (dialogwidth / 2);
	  
	  dialog.style.top = topposition + "px";
	  dialog.style.left = leftposition + "px";
	  dialogheader.className = type + "header";
	  dialogtitle.innerHTML = title;
	  dialogcontent.className = type;
	  dialogcontent.innerHTML = '<center><img src="/img/loading.gif" /></center>';
	  	  
	  var content = document.getElementById(WRAPPER);
	  
	  dialogmask.style.height = content.offsetHeight + 'px';
	  dialog.timer = setInterval("fadeDialog(1)", TIMER);
	 
	  if(autohide) 
	  {
		  dialogclose.style.visibility = "hidden";
		  window.setTimeout("hideDialog()", (autohide * 1000));
	  } 
	  else 
	  {
		  dialogclose.style.visibility = "visible";
	  }
	  
	  return dialogcontent;
}




function _initCalendar ( field_id, date_format )
{
	Calendar.setup
	(
		{
			inputField      :    field_id,   // id of the input field
			ifFormat        :    date_format //"%d/%m/%Y"
		}
	);
	
}

function highlight_field ( id )
{
	field = document.getElementById(id);
	
	if ( field )
	{
		field.focus();
	}
}

function showAjaxDateDialog ( title, type, url, date_fields_id, date_format, autohide, width, active_field_id )
{
	if ( !date_fields_id )
	{
		date_fields_id = new Array();
		date_fields_id[0] = 'start_date';
	}
	else if ( date_fields_id.length == 0 )
	{
		date_fields_id = new Array();
		date_fields_id[0] = 'start_date';
	}
	
	var dialogcontent = _initDialog ( title, type, url, autohide, width );
	
	
	  advAJAX.get({
	    url: url,
	    
	    timeout : 15000,
	    onTimeout : function() 
	    	{ 
	    		dialogcontent.innerHTML = "Connection timed out.";
	    	},
	    retry: 1,
	    
	    onRetry : function() 
	    	{ 
	    		dialogcontent.innerHTML = "Retry connection...";
	    	},
	   
	    onSuccess : function(obj) 
	    	{ 
	    		dialogcontent.innerHTML = obj.responseText;
	    		
	    		for (i=0; i<date_fields_id.length; i++)
	    		{
	    			_initCalendar (date_fields_id[i], date_format);
	    			//alert(date_fields_id[i]);
	    			//_initCalendar ('start_date');
	    		}
	    		
	    		
	    		if ( active_field_id )
	    		{
	    			highlight_field(active_field_id);
	    		}
	    		
	    	}, 
	    onError : function(obj) 
	    	{ 
	    		dialogcontent.innerHTML = "Error: " + obj.status; 
	    	}
		});
  
}


function showAjaxDialog ( title, type, url, autohide, width, active_field_id )
{
	
	var dialogcontent = _initDialog ( title, type, url, autohide, width );
	  
	  advAJAX.get({
	    url: url,
	    
	    timeout : 15000,
	    onTimeout : function() 
	    	{ 
	    		dialogcontent.innerHTML = "Connection timed out.";
	    	},
	    retry: 1,
	    
	    onRetry : function() 
	    	{ 
	    		dialogcontent.innerHTML = "Retry connection...";
	    	},
	   
	    onSuccess : function(obj) 
	    	{ 
	    		dialogcontent.innerHTML = obj.responseText;
	    		
	    		if ( active_field_id )
	    		{
	    			highlight_field(active_field_id);
	    		}
	    	}, 
	    onError : function(obj) 
	    	{ 
	    		dialogcontent.innerHTML = "Error: " + obj.status; 
	    	}
		});
  
}


//function showReportProblemDialog ( title, type, autohide, width )
//{
//	  url = "/course/reportproblem/";
//	  var dialogcontent = _initDialog ( title, type, url, autohide, width );
//		
//	 	
//	  advAJAX.get({
//	    url: '/course/reportproblem/',
//	    
//	    timeout : 15000,
//	    onTimeout : function() 
//	    	{ 
//	    		dialogcontent.innerHTML = "Connection timed out.";
//	    	},
//	    retry: 1,
//	    
//	    onRetry : function() 
//	    	{ 
//	    		dialogcontent.innerHTML = "Retry connection...";
//	    	},
//	   
//	    onSuccess : function(obj) 
//	    	{ 
//	    		dialogcontent.innerHTML = obj.responseText;
//	    	}, 
//	    onError : function(obj) 
//	    	{ 
//	    		dialogcontent.innerHTML = "Error: " + obj.status; 
//	    	}
//		});
//	 
//}


function showRegisterDialog(title, cid, ctype, type, autohide, width, active_field_id) 
{
	
  url = "/course/register/cid/"+cid+"/map_course_type/"+ctype;
  var dialogcontent = _initDialog ( title, type, url, autohide, width );
 	
  advAJAX.get({
    url: "/course/register/cid/"+cid+"/map_course_type/"+ctype,
    
    timeout : 15000,
    onTimeout : function() 
    	{ 
    		dialogcontent.innerHTML = "Connection timed out.";
    	},
    retry: 1,
    
    onRetry : function() 
    	{ 
    		dialogcontent.innerHTML = "Retry connection...";
    	},
   
    onSuccess : function(obj) 
    	{ 
    		dialogcontent.innerHTML = obj.responseText;
    		if ( active_field_id )
    		{
    			highlight_field(active_field_id);
    		}
    	}, 
    onError : function(obj) 
    	{ 
    		dialogcontent.innerHTML = "Error: " + obj.status; 
    	}
	});
 
}



// build/show the dialog box, populate the data and call the fadeDialog function //
function showDialog(title,message,type,autohide) {
  if(!type) {
    type = 'error';
  }
  var dialog;
  var dialogheader;
  var dialogclose;
  var dialogtitle;
  var dialogcontent;
  var dialogmask;
 
  if(!document.getElementById('dialog')) 
  {
    dialog = document.createElement('div');
    dialog.id = 'dialog';
    dialogheader = document.createElement('div');
    dialogheader.id = 'dialog-header';
    dialogtitle = document.createElement('div');
    dialogtitle.id = 'dialog-title';
    dialogclose = document.createElement('div');
    dialogclose.id = 'dialog-close'
    dialogcontent = document.createElement('div');
    dialogcontent.id = 'dialog-content';
    dialogmask = document.createElement('div');
    dialogmask.id = 'dialog-mask';
    document.body.appendChild(dialogmask);
    document.body.appendChild(dialog);
    dialog.appendChild(dialogheader);
    dialogheader.appendChild(dialogtitle);
    dialogheader.appendChild(dialogclose);
    dialog.appendChild(dialogcontent);;
    dialogclose.setAttribute('onclick','hideDialog()');
    dialogclose.onclick = hideDialog;
  } 
  else 
  {
    dialog = document.getElementById('dialog');
    dialogheader = document.getElementById('dialog-header');
    dialogtitle = document.getElementById('dialog-title');
    dialogclose = document.getElementById('dialog-close');
    dialogcontent = document.getElementById('dialog-content');
    dialogmask = document.getElementById('dialog-mask');
    dialogmask.style.visibility = "visible";
    dialog.style.visibility = "visible";
  }
  
  dialog.style.opacity = .00;
  dialog.style.filter = 'alpha(opacity=0)';
  dialog.alpha = 0;
  
  var width = pageWidth();
  var height = pageHeight();
  var left = leftPosition();
  var top = topPosition();
  var dialogwidth = dialog.offsetWidth;
  var dialogheight = dialog.offsetHeight;
  var topposition = top + (height / 3) - (dialogheight / 2);
  var leftposition = left + (width / 2) - (dialogwidth / 2);
  
  dialog.style.top = topposition + "px";
  dialog.style.left = leftposition + "px";
  dialogheader.className = type + "header";
  dialogtitle.innerHTML = title;
  dialogcontent.className = type;
  dialogcontent.innerHTML = message;
  
  var content = document.getElementById(WRAPPER);
  
  dialogmask.style.height = content.offsetHeight + 'px';
  dialog.timer = setInterval("fadeDialog(1)", TIMER);
  if(autohide) 
  {
    dialogclose.style.visibility = "hidden";
    window.setTimeout("hideDialog()", (autohide * 1000));
  } 
  else 
  {
    dialogclose.style.visibility = "visible";
  }
}




// hide the dialog box //
function hideInfoDialog() {
  //document.getElementById('info-dialog').style.display = 'none';
  //document.getElementById('info-dialog-mask').style.display = 'none';
  document.getElementById('info-window').style.display = 'none';
  //var dialog = document.getElementById('info-dialog');
  //clearInterval(dialog.timer);
  //dialog.timer = setInterval("fadeInfoDialog(0)", TIMER);
}

// fade-in the dialog box //
function fadeInfoDialog(flag) {
  if(flag == null) {
    flag = 1;
  }
  var dialog = document.getElementById('info-dialog');
  var value;
  if(flag == 1) {
    value = dialog.alpha + SPEED;
  } else {
    value = dialog.alpha - SPEED;
  }
  dialog.alpha = value;
  dialog.style.opacity = (value / 100);
  dialog.style.filter = 'alpha(opacity=' + value + ')';
  if(value >= 99) {
    clearInterval(dialog.timer);
    dialog.timer = null;
  } else if(value <= 1) {
    dialog.style.visibility = "hidden";
    document.getElementById('info-dialog-mask').style.visibility = "hidden";
    clearInterval(dialog.timer);
  }
}





// hide the dialog box //
function hideDialog() {
  var dialog = document.getElementById('dialog');
  clearInterval(dialog.timer);
  dialog.timer = setInterval("fadeDialog(0)", TIMER);
}

// fade-in the dialog box //
function fadeDialog(flag) {
  if(flag == null) {
    flag = 1;
  }
  var dialog = document.getElementById('dialog');
  var value;
  if(flag == 1) {
    value = dialog.alpha + SPEED;
  } else {
    value = dialog.alpha - SPEED;
  }
  dialog.alpha = value;
  dialog.style.opacity = (value / 100);
  dialog.style.filter = 'alpha(opacity=' + value + ')';
  if(value >= 99) {
    clearInterval(dialog.timer);
    dialog.timer = null;
  } else if(value <= 1) {
    dialog.style.visibility = "hidden";
    document.getElementById('dialog-mask').style.visibility = "hidden";
    clearInterval(dialog.timer);
  }
}
