function include(filename)
{
	var head = document.getElementsByTagName('head')[0];
	
	script = document.createElement('script');
	script.src = filename;
	script.type = 'text/javascript';
	
	head.appendChild(script)
}

Date.prototype.diff = function (second_date) {
	var one_day=1000*60*60*24;
	return Math.ceil((second_date.getTime()-this.getTime())/(one_day));
};


Date.prototype.diffDays = function (second_date) {
	var new_this = new Date(this.getFullYear(),this.getMonth(),this.getDate());
	var new_second = new Date(second_date.getFullYear(),second_date.getMonth(),second_date.getDate());
	return new_this.diff(new_second);
};

Math.sign = function (num) {
	return (num>0) ? 1 : ((num<0) ? -1 : 0);
};


function array_unique (myArray, compare) {
	var newArray=new Array();
	label:for(var i=0; i<myArray.length;i++ ) {  
		for(var j=0; j<newArray.length;j++ ) {
			if ((compare !== null && compare(newArray[j], myArray[i])) || myArray[i] == newArray[j])
				continue label;
		}
		newArray[newArray.length] = myArray[i];
	}
	return newArray;
}

// DEBUG UTILS
function print_r(theObj, output, ret_){
  var ret = (ret_ !== null ) ? ret_ : "";
  if(theObj.constructor == Array ||
     theObj.constructor == Object){
      ret += "";
    for(var p in theObj){
      if(theObj[p].constructor == Array||
         theObj[p].constructor == Object){
		 ret += "["+p+"] => "+typeof(theObj)+"\n";
        ret += "\t";
        ret = print_r(theObj[p], false, ret);
        ret += "";
      } else {
ret += "["+p+"] => "+theObj[p]+"\n";
      }
    }
    ret += "";
  }
  if (output !== null && output == true) document.write(ret);
  return ret;
}

