 function cloneObject(what) {
	var copyObject = new Object();
		for (i in what) {			
			copyObject[i] = what[i];
		}
	return copyObject;
}

function findObjIndex(dataList, obj) {   
  if (dataList == null) {
     return null;
  }
  for (var i=0; i<dataList.length; i++) {
     var e = dataList[i];
	 if(e != null){
		 if(e.UUID == obj.UUID) {  
		   return i;
		 }
	 }
  }
  return -1;
}

function findObjById(dataList, id) { 
  if (dataList == null) {
     return null;
  }  
  for (var i=0; i<dataList.length; i++) {
     var e = dataList[i];
     if(e.UUID == id) {  
       return e;
     }
  }
  return null;
}
  
function initializeCreatedObject(dl, obj) {
    obj.__parent = dl.__parent;
	obj.__className = dl.__className;
	obj.__index = dl.length;
	obj["UUID"] = null;
	obj["id"] = null;
	setUniqueId(dl, obj);
}	

function deleteFromArray(dl, obj) {
   var l = new Array(dl.length-1);
   var j = 0;
   for (var i=0; i<dl.length; i++) {
      if (dl[i] != obj) {
         l[j] = dl[i];
         j++;
      }
   }
   
   dl.length = 0;
   for (i=0; i<l.length; i++) {
      l[i].__index = i;
      dl.push(l[i]);
   }
}

function replaceInArray(dl, obj, obj2) {
  
   for (var i=0; i<dl.length; i++) {
      if (dl[i] == obj) {
         dl[i] = obj2;
         break;
      }
   }
}

function htmlTableRowIndexAt(table, event) {
   var yoff = table.scrollTop;
   var y;
   if (!is_Safari) {
		y = event.clientY;
	} else {
		y = event.clientY - document.body.scrollTop;
	}
   var n = table.rows.length;
   if (n == 0) {
      return -1;
   }
   var tr = table.rows[0];
   var t;
   // tr is not properly initialized by Safari browser; hence all this computation
   if (tr.cells.length > 0) {
      t = tr.cells[0];
   } else {
     t = tr;
   }
   var pos = RicoUtil.toViewportPosition(tr);
   for (var i=0; i<n; i++) {
      if (i < (n-1)) {
        var tr2 = table.rows[i+1];
        if (tr2.cells.length > 0) {
           tr2 = tr2.cells[0];
        }
        var pos2 = RicoUtil.toViewportPosition(tr2);
        if ((y >= (pos.y-yoff)) && (y <= (pos2.y - yoff))) {
           return i;
        }
        pos2 = pos;
      } else {
         return i;
      }
      
   }
   return -1;
}

function htmlTableCellIndexAt(table, row, event) {
   var x;
   var xoff = table.scrollLeft;
   if (!is_Safari) {
		x = event.clientX;
   } else {
		x = event.clientX - document.body.scrollLeft;
   }
   var n = row.cells.length;
   var c = row.cells[0];
   var pos = RicoUtil.toViewportPosition(c);
   for (var i=0; i<n; i++) {
      if (i == (n-1)) {
         return i;
      }
      c = row.cells[i+1];
      var pos2 = RicoUtil.toViewportPosition(c);
      if ((x >= (pos.x-xoff)) && (x <= (pos2.x - xoff))) {
           return i;
      }
      pos = pos2;
   }
   return -1;
}

function getBackground(color) {
   if (color == null) {
      return null;
   }
   var i = color.indexOf("_");
   var s;
   if (i < 0) {
      s = color;
   } else {
      s = "#" + color.substring(0, i);
   }
   return s;
}

function geForeground(color) {
   var i = color.indexOf("_");
   if (i < 0) {
      return null;
   }
   return "#" + color.substring(i+1);
}

function getTextColor(bc) {
   var tc = geForeground(bc);
   if (tc != null) {
      return tc;
   }
   tc = colorTranslationTable[bc];
   return tc;
}

var colorTranslationTable = {
   yellow : 'black',
   orange : 'black',
   green : 'white',
   purple : 'white',
   blue : 'white'
}


var days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var daysLong = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var monthsShort = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];

function consumeEvent(e) {
  if (e.preventDefault) {
      e.preventDefault();
  } 
  if (e.stopPropagation) {
      e.stopPropagation();
  } 
  e.cancelBubble = true;
  return false;
}

function getFullName(obj) {
   if (obj == null) {
      return "";
   }
   var f = obj["fName"];
   if (f == null) {
      f = "";
   }
   var l = obj["lName"];
   if (l == null) {
      l = "";
   }
   
   return f + " " + l;
}

function getBusinessName(obj) {
   if (obj == null) {
      return "";
   }
   var f = obj["businessName"];
   if (f == null) {
      f = "";
   }
  return f;
}

function get_nbsp(s) {
  if (s == null || s == "") {
     return "";
  }
  
  var n = s.length;
  var s2 = "";
  for (var i=0; i<n; i++) {
     s2 += "&nbsp;";
  }
  return s2;
}

function getDisplayTimeFromMins(h) {
  h = parseInt(h, 10);
  var hr = parseInt(h / 60, 10);
  var m = h % 60;
  
  var s = "AM";
  if (hr >= 12) {
	s = "PM";
	if (hr > 12) {
		hr -= 12;
	}
  }
  
  if (9 >= parseInt(m, 10)) {
    m = "0" + m;
  }  
  
  if (hr == 0) {
    hr = 12;
  }
  if(isNaN(hr) || isNaN(m)){
	  return "No Time";
  }
  
  return hr + ":" + m + " " + s;
}

function sortByLastName(a, b) {
    var x;
    var y;
	if(a.lName!=null){
		x = a.lName.toUpperCase();
	} else {
	    x = "";
	}
	if(b.lName!=null){
		y = b.lName.toUpperCase();
	} else {
	    y = "";
	}
	if (x == y) {
	   if(a.fName!=null){
			x = a.fName.toUpperCase();
	   } else {
			x = "";
	   }
	   if(b.fName!=null){
			y = b.fName.toUpperCase();
	   } else {
			y = "";
	   }
	   return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	
	} else {
	   if (x == "") {
	      return 1;
	   } else if (y == "") {
	      return -1;
	   }
	   return (x < y) ? -1 : 1;
	}
}

function sortByFirstName(a, b) {
	if(a.fName!=null){
		var x = a.fName.toUpperCase();
	} else {
	    x = "";
	}
	if(b.fName!=null){
		var y = b.fName.toUpperCase();
	} else {
	    y = "";
	}
	if (x == y) {
	   if(a.lName!=null){
			x = a.lName.toUpperCase();
	   } else {
			x = "";
	   }
	   if(b.lName!=null){
			y = b.lName.toUpperCase();
	   } else {
			y = "";
	   }
	   return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	
	} else {
	   return (x < y) ? -1 : 1;
	}
}

function sortBusinessName(a, b) {
    var x;
    var y;
	if(a.businessName!=null){
		x = a.businessName.toUpperCase();
	} else {
	    x = "";
	}
	if(b.businessName!=null){
		y = b.businessName.toUpperCase();
	} else {
	    y = "";
	}
	if (x == y) {
	   if(a.name!=null){
			x = a.name.toUpperCase();
	   } else {
			x = "";
	   }
	   if(b.name!=null){
			y = b.name.toUpperCase();
	   } else {
			y = "";
	   }
	   return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	
	} else {					
	   if (x == "") {
	      return 1;
	   } else if (y == "") {
	      return -1;
	   }
	   return (x < y) ? -1 : 1;
	}
}

function sortByStartTime(a, b) {
    var x;
    var y;
	if(a.startDT!=null){
		x = new Date(parseInt(a["startDT"]));		
	} else {
	    x = 0;
	}
	if(b.startDT!=null){
		y = new Date(parseInt(b["startDT"]));	
	} else {
	    y = 0;
	}
	if (x == y) {	   
	   return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	
	} else {					
	   if (x == 0) {
	      return 1;
	   } else if (y == 0) {
	      return -1;
	   }	   
	   return (x < y) ? -1 : 1;
	}
}

function sortEventByStartTime(a, b) {
    var x;
    var y;
	if(a.event["startDT"]!=null){		
		x = parseInt(a.event["startDT"]);
	} else {
	    x = 0;
	}
	if(b.event["startDT"]!=null){
		y = parseInt(b.event["startDT"]);
	} else {
	    y = 0;
	}
	if (x == y) {
		if(a.event["endDT"]!=null){
			x = new Date(parseInt(a.event["endDT"]));
		} else {
			x = "";
		}
		if(b.event["endDT"]!=null){
			y = new Date(parseInt(b.event["endDT"]));
		} else {
			y = "";
		}
	   return ((x < y) ? -1 : ((x > y) ? 1 : 0));	
	} else {					
	   if (x == 0) {
	      return 1;
	   } else if (y == 0) {
	      return -1;
	   }	   
	   return (x < y) ? -1 : 1;
	}
}



function sortGroups(a, b) {
	if(a.name!=null){
		var x = a.name.toUpperCase();
	} else {
	    x = "";
	}
	if(b.name!=null){
		var y = b.name.toUpperCase();
	} else {
	    y = "";
	}
	return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}