/*
	extensions
*/


function $get(key,url){
	if(arguments.length < 2) url =location.href;
	if(arguments.length > 0 && key != ""){
		if(key == "#"){
			var regex = new RegExp("[#]([^$]*)");
		} else if(key == "?"){
			var regex = new RegExp("[?]([^#$]*)");
		} else {
			var regex = new RegExp("[?&]"+key+"=([^&#]*)");
		}
		var results = regex.exec(url);
		return (results == null )? "" : results[1];
	} else {
		url = url.split("?");
		var results = {};
		if(url.length > 1){
			url = url[1].split("#");
			if(url.length > 1) results["hash"] = url[1];
			url[0].split("&").each(function(item,index){
				item = item.split("=");
				results[item[0]] = item[1];
			});
		}
		return results;
	}
}

Array.prototype.inArray = function (value)
// Returns true if the passed value is found in the
// array. Returns false if it is not.
{
	var i;
	for (i=0; i < this.length; i++) {
	// Matches identical (===), not just similar (==).
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};

String.prototype.toArray = function() {
   return this.split('');
}

Date.prototype.getDateSuffix = function(d){
	nTHArray = new Array("1" , "2" , "3");
	if(d == null){
		d = (this.getDate()).toString();
	}
	
	if(typeof(d) == "Date"){
		d = (d.getDate()).toString();
	}
	
	if(((d.toArray()).reverse())[0] + ((d.toArray()).reverse())[1]  == "11" || !nTHArray.inArray(d)){
		return "th";
	}
	
	if(((d.toArray()).reverse())[0] == "1"){
		return "st";
	}
	
	if(((d.toArray()).reverse())[0] == "2"){
		return "nd";
	}
	
	if(((d.toArray()).reverse())[0] == "3"){
		return "rd";
	}	
	return false;
}


Date.prototype.getMonthFull = function(m){
	if(m==null){
		m = this.getMonth();
	}
	if(typeof(m) == "Date"){
		m= m.getMonth();
	}
	months = new Array(
		"January",
		"February",
		"March",
		"April",
		"May",
		"June",
		"July",
		"August",
		"September",
		"October",
		"November",
		"December"
	);	
	return months[m];
}

Date.prototype.getMonthShort = function(m){
	if(m==null){
		m = this.getMonth();
	}
	if(typeof(m) == "Date"){
		m= m.getMonth();
	}
	months = new Array(
		"Jan",
		"Feb",
		"Mar",
		"Apr",
		"May",
		"Jun",
		"Jul",
		"Aug",
		"Sep",
		"Oct",
		"Nov",
		"Dec"
	);	
	return months[m];
}


Date.prototype.countdown = function(arg1 , arg2 , arg3){
	diff = new Date(); 
	format = ["week" , "day" , "hour" , "min" , "sec"];
	
	if(typeof(arg1) == "Array" || typeof(arg1) == "Object" || typeof(arg1) == "object"){
		date1 = this;
		format = arg1;
		
		if(typeof(arg2) == "String"){
			date2 = new Date(arg2);
		}else if(typeof(arg2) == "Date"){
			date2 = arg2;
		}else{
			date2 = new Date();
		}
	} else if(typeof(arg1) == "Date" || typeof(arg1) == "String"){
		if(typeof(arg1) == "Date"){
			date1 == arg1;
		}else{
			date1 = new Date(arg1);
		}
		if(typeof(arg2) == "Array" || typeof(arg2) == "Object" ||  typeof(arg2) == "object"){
			format = arg2;
			if(typeof(arg3) == "String"){
				date2 = new Date(arg3);
			}else if(typeof(arg3) == "Date"){
				date2 = arg3;
			}else{
				date2 = new Date();
			}
		}else if(typeof(arg2) == "Date" || typeof(arg2) == "String"){
			if(typeof(arg2) == "Date"){
				date2 == arg2;
			}else{
				date2 = new Date(arg2);
			}
		}else{
			date2 = new Date();
		}
	}	
	diff.setTime(Math.abs(date1.getTime() - date2.getTime()));
	
	timediff = diff.getTime();
	diffObj ={
		'timediff' : timediff		
	}
	if(format.inArray("week")){
		diffObj.weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
		timediff -= diffObj.weeks * (1000 * 60 * 60 * 24 * 7);
	}
	
	if(format.inArray("day")){
		diffObj.days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
		timediff -= diffObj.days * (1000 * 60 * 60 * 24);
	}
	
	if(format.inArray("hour")){
		diffObj.hours = Math.floor(timediff / (1000 * 60 * 60)); 
		timediff -= diffObj.hours * (1000 * 60 * 60);
	}
	
	if(format.inArray("min")){
		diffObj.mins = Math.floor(timediff / (1000 * 60)); 
		timediff -= diffObj.mins * (1000 * 60);
	}
	
	if(format.inArray("sec")){
		diffObj.secs = Math.floor(timediff / 1000); 
		timediff -= diffObj.secs * 1000;
	}
	
	if(date1.getTime() < date2.getTime() == true){
		diffObj.weeks = 0;
		diffObj.days = 0;
		diffObj.hours = 0;
		diffObj.mins = 0;
		diffObj.secs = 0;
	}
	return diffObj;
	
}
	