var dateformat ='Y-m-d';
var timeformat ='H:i';
var datetimeformat = dateformat+' '+timeformat;
var longdatetimeformat = 'Y-M-d D'+' '+timeformat;
var noyeardatetimeformat = 'M-d D'+' '+timeformat;
var fulldatetimeformat = datetimeformat+':s';
var oneMinute = 60 * 1000;  
var oneHour = oneMinute * 60;
var oneDay = oneHour * 24;
var oneWeek = oneDay * 7;
var oneYearApprx = oneWeek * 52;
var ACCEPTED = 'A';
var WAITING = 'W';
var DECLINED = 'D';
var ERR_LOGIN_REQUIRED = 512;
var ERR_PASSWORD_CHANGE = 100;
var BOOKING_LIMIT = oneWeek*2;
var SUPERSTAR = 'A';

function getResponce(responseText){
	var packet;
	try{
		packet = Ext.decode(responseText);
	}
	catch(error){
		packet = initResponseVO();
		packet.has_error = true;
		packet.errors.message = responseText;
	}
	return packet;
}

function getRef(object){
	 var ref;
	 
	 if(object.xparent != null)
		 ref = object.xparent;
	 else
		 ref = object;
	 return ref;
}


function showErrorMsg(errors){
    var parsedmsg = '';
    var stdmessage = 'Communication failure. Please try to relogin. If the problem persists please contact us';
    
  if (errors == null){
	  parsedmsg = stdmessage;
  }
  else
   try{	  
	if(isArray(errors)){

		for (i=0;i< errors.length;i++){
			if (typeof errors[0] == 'string')
				parsedmsg = parsedmsg + errors[i]+'\n';
			else	
				parsedmsg = parsedmsg + errors[i].id +': '+ errors[i].message +'\n';
		}
		
	}
	else if (typeof errors=='object'){
		if (errors.id == null ||  errors.message == null)
			parsedmsg = stdmessage;
		else	
			parsedmsg = errors.id+': '+errors.message;
	}	
	else{
		  
		  var e =errors;
		  var i = e.indexOf('<body>');
		  if (i > 0)
			  e = e.substring(i+7);
		  
		  i = e.indexOf('</body>');
		  if (i > 0)
			  e = e.substring(0,i-1);
		  
		  i = e.indexOf('<p>');
		  if (i > 0)
			  e = e.substring(i+3);
		  
		  i = e.indexOf('</p>');
		  if (i > 0)
			  e = e.substring(0,i);
		  
		  parsedmsg = e; 
	}
   }
   catch(e){
	   parsedmsg = stdmessage;
   }
   Ext.Msg.show({
	   title:'Error',
	   msg: parsedmsg,
	   buttons: Ext.Msg.OK,
	   icon: Ext.MessageBox.ERROR,
	   fn:onErrorDismissal
	});	
	 
}


function onErrorDismissal(buttonId,text,opt){
	try{
		if (opt.msg != null){
			var idx = opt.msg.indexOf(ERR_LOGIN_REQUIRED);
			if (idx > -1)
				redirect('members.shtml');
		}
		
	}
	catch(e){
		//do nothing;
	}
}

function showInfoMsg(message){
	Ext.Msg.show({
		   title:'Information',
		   msg: message,
		   buttons: Ext.Msg.OK,
		   icon: Ext.MessageBox.INFO
		});	
}

function showWarningMsg(warning){
    var parsedmsg = '';
	if(isArray(warning)){
		for (i=0;i< warning.length;i++)
				parsedmsg = parsedmsg + warning[i]+'\n';
	}
	else 
		parsedmsg = warning;
			
	Ext.Msg.show({
		   title:'Warning',
		   msg: parsedmsg,
		   buttons: Ext.Msg.OK,
		   icon: Ext.MessageBox.WARNING
		});	
}


function getForm(object, formName){
	
	var form = object.find('name',formName);
	
	if (form != null && isArray(form) && form.length > 0){
	 form = form[0].getForm();	
	 return form;
	} 
	
	else
	  return null;	
}

function isArray(obj) {
   if (obj == null) return false; 
   if (obj.constructor.toString().indexOf("Array") == -1)
      return false;
   else
      return true;
}


function redirect(page){
	window.location='./'+page;
}

function getButtonByName(name, buttonlist){
	if (buttonlist == null || buttonlist.lrngth == 0 || name == null )
		return null;
	for (i=0;i<buttonlist.length;i++)
		if (buttonlist[i].name == name)
			return buttonlist[i];
	
		
	return null;
}
//find component's container by name. If th container's name is null
// then the function finds top container
function findContainerByName(object, containerName){
	var str = "object";
	var parent;
	var container = object;
	while(true){
		parent = eval(str);
		if (parent == null){
		   return container;
		}
		else{
			try{
				if (containerName != null && containerName.length > 0 )
					if (parent.name == containerName)
						return parent;
			}
			catch(e){
				// ignore;
			}
		
			container = parent;
			str = str + ".ownerCt";
		}
	}
}

//for older browsers
if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
};

if (!Array.prototype.xfind){
	Array.prototype.xfind = function(searchObj) {
		var so = Ext.encode(searchObj);
		for (i=0; i<this.length; i++) 
			if (Ext.encode(this[i]) == so)
				return i+1;
		return -1;
	}	
}

if (!Array.prototype.xremove){
	Array.prototype.xremove = function(ObjToRemove) {
		var idx = this.xfind(ObjToRemove);
		if (idx <0)
			return null;
	
		var a = this.slice(0,idx-1);
		var b = this.slice(idx);
		var c = null;
	
		if (a!= null) c = a;
		if (b!= null)
			if (c == null)
				c = b;
			else
				c = c.concat(b);
		
		return c;
	};	
}

if (!Array.prototype.xxremove){
 Array.prototype.xxremove = function(from, to) {
	  var rest = this.slice((to || from) + 1 || this.length);
	  this.length = from < 0 ? this.length + from : from;
	  return this.push.apply(this, rest);
	};
}	

function getFormatedDateTime(dt){
	return Ext.util.Format.date(dt,datetimeformat)+':00';
}

function getFormatedDate(dt){
	return Ext.util.Format.date(dt,dateformat);
}

function getFormatedTime(dt){
	return Ext.util.Format.date(dt,timeformat);
}

function getDatePart(strDt){
	var idx = strDt.indexOf(' ');
	if (idx >= 0)
		return strDt.substring(0,idx);
	return strDt;  	
}

function getTimePart(strDt, endOfDayFlg){
	var idx = strDt.indexOf(' ');
	if (idx >= 0)
		return strDt.substring(idx+1,strDt.length-3);
	if (endOfDayFlg == null || !endOfDayFlg )
		return '00:00:00';
	
	return '23:59:59';  	
}

function toDate(strDt){
	var dt = getDatePart(strDt).split('-');
	var tm = getTimePart(strDt).split(':');
//	new Date(yy,mm,dd,hh,mm,ss)
	return new Date(dt[0],dt[1]-1,dt[2],tm[0],tm[1],'00');

}

function getToolBarItem(toolbar,itemname){
	if (!isArray(toolbar))
		return -1;
	for (i = 0; i < toolbar.length; i++){
		try{
			if (toolbar[i].name == itemname )
				return i;
		}
		catch(e){
			;
		}
	}	
	return -1;
};

function mapLocation(addressname,adr){
	var gm = new com.comrades.GMap({title:'Location Map', address:adr, addresstitle:addressname});
    gm.show();
}

function loadInspector (store, records, options){
	 var errors = null;
	 try{
		 if (store.reader.jsonData.has_error){
			 showErrorMsg(store.reader.jsonData.errors);
		 }
	 }
	 catch (e){
		 //unknown exception. Let the datastore listener handle it
		 throw(e); 
	 }
}


function isEventFull(eventinfo){
	if (eventinfo.spaceLimit == null || eventinfo.attendance == null || eventinfo.spaceLimit <=0)
		return false;
	var l = getEventUsersCount(eventinfo,ACCEPTED);
	return (eventinfo.spaceLimit <= l);
}

function getEventUsersCount(eventinfo, userstatus){
	if (eventinfo.attendance == null )
		return '0';
	var l = '0';
	for (i=0; i < eventinfo.attendance.length;i++)
		if (userstatus != null){
			if ((eventinfo.attendance[i].statusCd == userstatus) && (eventinfo.attendance[i].user.type.code != 2))
				l++;
		}
		else
			l++;

	return l;
}


function isModuleExists(modulename) {
	var lst = membercontainer.find('name', modulename);
	return lst[0];

}

function getRestrictLevelDesc(value, cell){
 if( value == null || value == '')
	 return 'Unrestricted';
 else
	 return value;
} 

function getSpaceRemainingDesc(value, cell){
	 if( value == null || value == -1)
		 return 'N/A';
	 else if (value == '0')
		 return 'Full';
	 else
		 return value;	
}

function showChangePws(object){
	var wnd = isModuleExists('com.comrades.passwordform');
	if (wnd == null || wnd.length <= 0) {
		wnd = new com.comrades.PasswordChangeForm( {
			animateTarget :"comrades-toolbar",
			url :frontControllerURL
		});
	}
	wnd.addListener('password_changed',clearLoginForm,this);
	wnd.show();	
}


function clearLoginForm(object){
	var wnd = Ext.WindowMgr.get('com.comrades.loginform');
	if (wnd == null || wnd.length <=0)
		return;
	else{
		wnd.destroy();
		showEvents(null);
	}	
}

function showEvents(tagid){
	var wnd = isModuleExists('com.comrades.eventgrid');
	var attendee = new Attendance();
	attendee.userId = currentUser.id;
	wtitle = null;
	_action = null;
	userpanel.setTitle('Welcome  '+currentUser.firstName+' '+currentUser.lastName);
	if ( tagid == null || tagid == 'comrades_userpanel_myevents'){
		wtitle = 'My Events';
		_action = 'GetAcceptedEvents';
	}
	else if(tagid == 'comrades_userpanel_waitingevents'){
		wtitle = 'Waiting';
		_action = 'GetWaitingEvents';
	}
	else{
		wtitle = 'Other Events';
		_action = 'GetEvents';
	}	

	if (wnd == null || wnd.length <= 0){
		wnd = new com.comrades.EventGrid( {
			title: wtitle,
			xaction:_action,
			animateTarget :"comrades-toolbar",
			url :frontControllerURL,
			maximized:true,
			//one year from current date
			xdaterange: new DateRange({fromDate:getFormatedDateTime(new Date),
				toDate: getFormatedDateTime( new Date(new Date().getTime()+oneYearApprx)) }),
			xattendance: attendee	
			 	
		});
		centerarea.add(wnd);
		centerarea.doLayout();
		membercontainer.syncSize();
	}
	else{
		wnd.setTitle(wtitle);
		wnd.setAttendance(attendee);
		wnd.setAction(_action);
		wnd.refreshGrid();
	}		
	wnd.show();	
}
