var WEEKDAYS = new Array(7);
WEEKDAYS[0] = "Sunday";
WEEKDAYS[1] = "Monday";
WEEKDAYS[2] = "Tuesday";
WEEKDAYS[3] = "Wednesday";
WEEKDAYS[4] = "Thursday";
WEEKDAYS[5] = "Friday";
WEEKDAYS[6] = "Saturday";

var MONTHS = new Array(12);
MONTHS[1] = "January";
MONTHS[2] = "February"; 
MONTHS[3] = "March"; 
MONTHS[4] = "April"; 
MONTHS[5] = "May"; 
MONTHS[6] = "June"; 
MONTHS[7] = "July"; 
MONTHS[8] = "August"; 
MONTHS[9] = "September"; 
MONTHS[10] = "October"; 
MONTHS[11] = "November"; 
MONTHS[12] = "December";

var SHORT_MONTHS = new Array(12);
SHORT_MONTHS[1] = "Jan";
SHORT_MONTHS[2] = "Feb"; 
SHORT_MONTHS[3] = "Mar"; 
SHORT_MONTHS[4] = "Apr"; 
SHORT_MONTHS[5] = "May"; 
SHORT_MONTHS[6] = "Jun"; 
SHORT_MONTHS[7] = "Jul"; 
SHORT_MONTHS[8] = "Aug"; 
SHORT_MONTHS[9] = "Sep"; 
SHORT_MONTHS[10] = "Oct"; 
SHORT_MONTHS[11] = "Nov"; 
SHORT_MONTHS[12] = "Dec";

var DAYS = new Array(31);
for(i=1; i<=31; i++){
	DAYS[i] = i;
	i++;
}

var YEARS = new Array(50);

var SYSTEM_DATE = new Date();
var SYSTEM_YEAR = SYSTEM_DATE.getFullYear();
var calendar_year = SYSTEM_YEAR;
for(i=0; i<50;i++){
	YEARS[calendar_year] = calendar_year;
	calendar_year++;
}
/**
 * Concatenates the values of a variable into an easily readable string
 * by Matt Hackett [scriptnode.com]
 * @param {Object} x The variable to debug
 * @param {Number} max The maximum number of recursions allowed (keep low, around 5 for HTML elements to prevent errors) [default: 10]
 * @param {String} sep The separator to use between [default: a single space ' ']
 * @param {Number} l The current level deep (amount of recursion). Do not use this parameter: it's for the function's own use
 */
function print_r(x, max, sep, l) {

	l = l || 0;
	max = max || 10;
	sep = sep || ' ';

	if (l > max) {
		return "[WARNING: Too much recursion]\n";
	}

	var
		i,
		r = '',
		t = typeof x,
		tab = '';

	if (x === null) {
		r += "(null)\n";
	} else if (t == 'object') {

		l++;

		for (i = 0; i < l; i++) {
			tab += sep;
		}

		if (x && x.length) {
			t = 'array';
		}

		r += '(' + t + ") :\n";

		for (i in x) {
			try {
				r += tab + '[' + i + '] : ' + print_r(x[i], max, sep, (l + 1));
			} catch(e) {
				return "[ERROR: " + e + "]\n";
			}
		}

	} else {

		if (t == 'string') {
			if (x == '') {
				x = '(empty)';
			}
		}

		r += '(' + t + ') ' + x + "\n";

	}

	return r;

};

function linkify_plain(text)
{
	if( !text ) return text;
	text = text.replace(/((https?\:\/\/|ftp\:\/\/)|(www\.))(\S+)(\w{2,4})(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/gi,function(url){
		nice = url;
		if( url.match('^https?:\/\/') )
		{
			nice = nice.replace(/^https?:\/\//i,'')
		}
		else
			url = 'http://'+url;
		return '<a target="_blank" style="color:#0090CB" href="'+ url +'">'+ url +'</a>';
/*		return ' <a target="_blank" style="color:#466578;text-decoration:none;font-weight:normal;"  onmouseover="this.style.color=\'#8c255a\';" onmouseout="this.style.color=\'#466578\';" href="'+ url +'">'+ url +'</a>';*/
	});
	return text;
}
//---displays/hides a div by sliding down/up------
function showHideDiv(divId){
	if ($("#" + divId).is(":hidden")) {
		if(jQuery.trim($("#" + divId).html()) != ""){
			$("#" + divId).slideDown("slow");
		}
	} else {
		$("#" + divId).slideUp("slow");
	}
}
function showDiv(divId){
	if ($("#" + divId).is(":hidden")) {
		if(jQuery.trim($("#" + divId).html()) != ""){
			$("#" + divId).slideDown("slow");
		}
	} 
}
function hideDiv(divId){
	if ($("#" + divId).is(":hidden")) {
	} else {
		$("#" + divId).slideUp("slow");
	}
}

//--selects/deselects a group of checkbox with same name------
function select_all(name, selectorId){
	$("INPUT[name='" + name + "'][type='checkbox']").attr('checked', $('#' + selectorId).is(':checked'));
}

function isValidEmailAddress(emailAddress) {
	var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	
	return pattern.test(emailAddress);
}

function tweet12HrClock(tweetTime){
	var calcTime = "";
	if((tweetTime.getHours() >=0) && (tweetTime.getHours() < 12)){
		calcTime = zeroPad(tweetTime.getHours(),2) + ":" + zeroPad(tweetTime.getMinutes(),2) + " am";
	}else if(tweetTime.getHours() == 12){
		calcTime = zeroPad(tweetTime.getHours(),2) + ":" + zeroPad(tweetTime.getMinutes(),2) + " pm";
	}else if((tweetTime.getHours() > 12) && (tweetTime.getHours() < 24)){
		calcTime = zeroPad(tweetTime.getHours()-12,2) + ":" + zeroPad(tweetTime.getMinutes(),2) + " pm";
	}
	return calcTime;
}

function createDateInput(selectDayId, selectMonthId, selectYearId){
	populateSelect(selectDayId, DAYS , "-Day-");
	populateSelect(selectMonthId, MONTHS, "-Month-");
	populateSelect(selectYearId, YEARS, "-Year-");
}

function populateSelect(selectId, optionArray, zeroethItem){
	var output = new Array();
	var i=0;
	output[i++] = "<option value=\"0\">" + zeroethItem + "</option>";
	for(key in optionArray)
	{
		output[i++] = "<option value=\"" + key +"\">"+ optionArray[key] +'</option>';
	}
	
	$('#' + selectId).html(output.join(''));
}
//e.g.
//$.strPad(12, 5); // returns 00012
//$.strPad('abc', 6, '#'); // returns ###abc
$.strPad = function(str,len,padStr,posn) {
//	posn="left"/"right". To be implemented if reqd
	var o = str.toString();
	if (!padStr) { padStr = '0'; }
	while (o.length < len) {
		o = padStr + o;
	}
	return o;
};


function echeckEmail(str) {
			
	var at="@"
	var dot="."
	var lat=str.indexOf(at)
	var lstr=str.length
	var ldot=str.indexOf(dot)
	if (str.indexOf(at)==-1){
	   alert("Invalid e-mail Id!")
	   return false
	}
	
	if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
	   alert("Invalid e-mail Id!")
	   return false
	}
	
	if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		alert("Invalid e-mail Id!")
		return false
	}
	
	 if (str.indexOf(at,(lat+1))!=-1){
		alert("Invalid e-mail Id!")
		return false
	 }
	
	 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		alert("Invalid e-mail Id!")
		return false
	 }
	
	 if (str.indexOf(dot,(lat+2))==-1){
		alert("Invalid e-mail Id!")
		return false
	 }
	
	 if (str.indexOf(" ")!=-1){
		alert("Invalid e-mail Id!")
		return false
	 }
	
	 return true					
	}


function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}

function alphanumeric(alphane)
{
	var numaric = alphane;
	for(var j=0; j<numaric.length; j++)
		{
		  var alphaa = numaric.charAt(j);
		  var hh = alphaa.charCodeAt(0);
		  if((hh > 47 && hh<58) || (hh > 64 && hh<91) || (hh > 96 && hh<123))
		  {
		  }else{
			 return false;
		  }
 		}
 return true;
}

function twitter_search_relative_time(time_value) { //Converts twitter time to minutes ago format
        var values = time_value.split(" ");
        time_value = values[2] + " " + values[1] + ", " + values[3] + " " + values[4];
        var parsed_date = Date.parse(time_value);
        var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
        var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
        delta = delta + (relative_to.getTimezoneOffset() * 60);
	
        var r = '';
        if (delta < 60) {
          r = 'a minute ago';
        } else if(delta < 120) {
          r = 'couple of minutes ago';
        } else if(delta < (45*60)) {
          r = (parseInt(delta / 60)).toString() + ' minutes ago';
        } else if(delta < (90*60)) {
          r = 'an hour ago';
        } else if(delta < (24*60*60)) {
          r = '' + (parseInt(delta / 3600)).toString() + ' hours ago';
        } else if(delta < (48*60*60)) {
          r = '1 day ago';
        } else {
          r = (parseInt(delta / 86400)).toString() + ' days ago';
        }

        return r;
}

function twitter_relative_time(time_value) {
  var values = time_value.split(" ");
  time_value = values[1] + " " + values[2] + ", " + values[5] + " " + values[3];
  var parsed_date = Date.parse(time_value);
  var relative_to = (arguments.length > 1) ? arguments[1] : new Date();
  var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
  delta = delta + (relative_to.getTimezoneOffset() * 60);

  var r = '';
  if (delta < 60) {
	r = 'a minute ago';
  } else if(delta < 120) {
	r = 'couple of minutes ago';
  } else if(delta < (45*60)) {
	r = (parseInt(delta / 60)).toString() + ' minutes ago';
  } else if(delta < (90*60)) {
	r = 'an hour ago';
  } else if(delta < (24*60*60)) {
	r = '' + (parseInt(delta / 3600)).toString() + ' hours ago';
  } else if(delta < (48*60*60)) {
	r = '1 day ago';
  } else {
	r = (parseInt(delta / 86400)).toString() + ' days ago';
  }

  return r;
}

function fitMap( map, points ) {
	var bounds = new GLatLngBounds();
	for (var i=0; i< points.length; i++) {
		bounds.extend(points[i]);
	}
	var zoomLevel = map.getBoundsZoomLevel(bounds);
	switch (zoomLevel){
		case 0: zoomLevel = 1;break;
		case 1: break;
		default: zoomLevel = zoomLevel; break;
	}
//	zoomControl.mapZoom(map,0,zoomLevel);
	map.setCenter(bounds.getCenter(), zoomLevel);
}
/*Automatic detection of sorry no imagery found and setting zoom level accordingly. google map version should be atleast 2.213
GEvent.addDomListener(window,"load",function(){
	G_HYBRID_MAP.getMaximumResolution = function () { return 25 };
	G_HYBRID_MAP.getErrorMessage = function() {
		map.setZoom(map.getZoom()-1);
    } 
});*/

