// DATE FORMAT PROTOTYPE
/* 
global counter , it get reset to 0 on header.comp ln 29 
when the page is refreshed; its value is used to generate 
a unique id for each timediff div on printfuncts ln 32
*/
var gsMonthNames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
var gsDayNames = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');


function dateDiff(firstdate,firsttime,seconddate,secondtime) {
date1 = new Date();
date2 = new Date();
diff  = new Date();

date1temp = new Date(firstdate + " " + firsttime);
date1.setTime(date1temp.getTime());

date2temp = new Date(seconddate + " " + secondtime);
date2.setTime(date2temp.getTime());

// sets difference date to difference of first date and second date
diff.setTime(Math.abs(date1.getTime() - date2.getTime()));

timediff = diff.getTime();

weeks = Math.floor(timediff / (1000 * 60 * 60 * 24 * 7));
timediff -= weeks * (1000 * 60 * 60 * 24 * 7);

days = Math.floor(timediff / (1000 * 60 * 60 * 24)); 
timediff -= days * (1000 * 60 * 60 * 24);

hours = Math.floor(timediff / (1000 * 60 * 60)); 
timediff -= hours * (1000 * 60 * 60);

mins = Math.floor(timediff / (1000 * 60)); 
timediff -= mins * (1000 * 60);

secs = Math.floor(timediff / 1000); 
timediff -= secs * 1000;

var date_difference = new Array;
date_difference.push(weeks,days,hours,mins,secs);
//prompt("date difference" , date_difference);
return date_difference;
}

// zf prototype : is add leading zeroes to strings or numbers used in the date format prototype
String.prototype.zf = function(l) { return '0'.string(l - this.length) + this; }
String.prototype.string = function(l) { var s = '', i = 0; while (i++ < l) { s += this; } return s; }
Number.prototype.zf = function(l) { return this.toString().zf(l); }

// the date format prototype
Date.prototype.format = function(f){
    if (!this.valueOf())
        return '&nbsp;';
		var d = this;
		return f.replace(/(yyyy|mmmm|mmm|mm|dddd|ddd|dd|hh|nn|ss|a\/p)/gi,
        function($1){
            switch ($1.toLowerCase()){
            case 'yyyy': return d.getFullYear();
            case 'mmmm': return gsMonthNames[d.getMonth()];
            case 'mmm':  return gsMonthNames[d.getMonth()].substr(0, 3);
            case 'mm':   return (d.getMonth() + 1).zf(2);
            case 'dddd': return gsDayNames[d.getDay()];
            case 'ddd':  return gsDayNames[d.getDay()].substr(0, 3);
            case 'dd':   return d.getDate().zf(2);
            case 'hh':   return h = d.getHours();//((h = d.getHours() % 12) ? h : 12).zf(2);
            case 'nn':   return d.getMinutes().zf(2);
            case 'ss':   return d.getSeconds().zf(2);
            case 'a/p':  return d.getHours(); // < 12 ? 'AM' : 'PM';
            }
        }
    );
}
//formats the server side posteddate into a format that dateDiff can deal with mm/dd/yyyy and hh:mm:ss
function format_posteddate(posteddate){
	var return_arr = new Array();
	// separate date from time and separate date segments -
	var fulldate_arr = posteddate.split(" "); 
	var date_arr = fulldate_arr[0].split("-");
	
	// reorder as day,month,year
	var year = date_arr.shift();
	var month = date_arr.shift();
	var day = date_arr.shift();
	date_arr.push(month,day,year);
	
	// join date into string using / and pack to return
	var date = date_arr.join("/");
	return_arr.push(date,fulldate_arr[1]);
//	alert("return array" + return_arr);
	return return_arr;
}
//takes an array which elements in order are weeks,days,hours,mins,secs. returns a string with the date difference
function round_up_date_difference(date_arr){
	var plural = "s";			
	var timeZone = getClientTimezone();
	//timeZone = 0;
	//alert("timeZone: " + timeZone);

	// clock hour shift fix 28/10/2007 clocks back one hour
	if (timeZone == 0){
		timeZone -= 1;
	}
	if (timeZone < 0){

		// add one hour to the hours
		date_arr[2] += 0;

		//substract the timezone converted into positive from the hours
		date_arr[2] -= Math.abs(timeZone);

		//alert("timeZone NEGATIVE" + date_arr[2] + date_arr[3]);
	}else{
		
		// if the timezone is positive
		// substract timezone hours from hours
		
		date_arr[2] -= timeZone;
		
		// 1 substract minutes from	60 and make the result
		// the current minutes

		var minutes = 60 - date_arr[3];
		date_arr[3] = minutes;
		//alert("timeZone POSITIVE" + date_arr[2] + date_arr[3] );
	}
	
	// add weeks and day together as days
	var days = ( date_arr[0] * 7 ) + date_arr[1];
	if (days > 0){
		( days == 1 )?plural="":plural="s"; 
		return days +" day"+plural+" ago";
	}
	else if (date_arr[2] > 0){
		( date_arr[2] == 1 )?plural="":plural="s"; 
		return date_arr[2] + " hour"+plural+" ago";  
	}
	else if (date_arr[3] > 0){
		( date_arr[3] == 1 )?plural="":plural="s"; 
		return date_arr[3] + " minute"+plural+" ago";  
	}
	else{
		( date_arr[4] == 1 )?plural="":plural="s"; 
		return date_arr[4] + " second"+plural+" ago";  
	}
}
function update_timediff_span(element_id, posted_date){
		
		// get the posteddate of the article and format it
		//var posteddate = "<% $args{'posteddate'} %>";
		//alert("server date "+ posted_date);
		posted_date = format_posteddate(posted_date);
		//alert("formatted "+ posted_date);

		// get todays date 
		var today_date = new Date().format('mm/dd/yyyy');
		var today_time = new Date().format('hh:nn:ss');
		
		//prompt("dates" , "today date " + today_date + "today time " + today_time + "posted_date" +  posted_date[0] + "posted_date" + posted_date[1] );						
		// calculate difference
		var date_difference 
		= dateDiff(posted_date[0],posted_date[1],today_date,today_time);
		// format to render and append to span
		var date_diff_to_render = round_up_date_difference(date_difference);
		if(isNaN(parseInt(date_diff_to_render))){
			date_diff_to_render ="";
			return;
		}
		document.getElementById(element_id).innerHTML
		="(<i>" + date_diff_to_render + "</i>)";
		//alert("rounded date "+ date_diff_to_render);		
}

function getClientTimezone(){
	var d = new Date();
	var gmtHours = d.getTimezoneOffset()/60;
	return gmtHours;
}