//Returns a Date object given a string of the form e.g. stringToDate('14:00','30.01.2006');
function stringToDate(t, d) {
     var hour = 00;
     var mins = 00;
     var day = 00;
     var month = 00;
     var year = 00;

     if (t) {
		var hoursAndMins = t.split(":");
		hour = parseFloat(hoursAndMins[0]);
		mins = parseFloat(hoursAndMins[1]);
	}
    if (d) {
		if (d.indexOf(".") > -1) { 
	        var dayMonthYear = d.split(".");
		} else if (d.indexOf("/") > -1) {
			var dayMonthYear = d.split("/");
		} else {
			var dayMonthYear = d.split("-");
		}
        day = parseFloat(dayMonthYear[0]);
        month = parseFloat(dayMonthYear[1])-1;
        if (dayMonthYear[2]) {
			year = parseFloat(dayMonthYear[2]); 
		}
    }
    var eventDate = new Date(year, month, day, hour, mins, 00); 
    return eventDate;
}

//Changes the date parameter to be the date in the user's local timezone (adjusts for DST)
function toLocalTimeZone(d, inBST) {
    //one hour in millisecs
	var ONE_HOUR = 1000*60*60;
	var eventDate = d;

	if (inBST == 'true' || inBST == true) {
		eventTimeMillis = eventDate.getTime();
		eventTimeMillis -= ONE_HOUR;
		eventDate = new Date(eventTimeMillis);  
	} 
    //always gives value from the GMT (in minutes)
    var gmtOffsetFromPC = new Date().getTimezoneOffset();  
	//if event date in BST convert it to GMT to make calculations easier
	var eventTimeMillis = eventDate.getTime();
    eventTimeMillis -= gmtOffsetFromPC*60*1000;  //bring it back to millisecs before subtracting
    eventDate  = new Date(eventTimeMillis);
    //subtracting the  offset from eventDate will give eventDate in PC timezone
	return eventDate;
}

function addPadding(p,a) {
	p += "";
	l = parseFloat(p.length);
	pp = p;
	if (a >= l) {
		while (l < a) {
			pp = "0"+pp;
			l++;
		}
	}
	return pp;
}

// will display GMT offset if logged in and timezone change is selected otherwise will show either GMT or GMT+1 as timezone
function displayGMToffset(inBST, adjust) {
	if (!adjust) { 
		if ((inBST == 'true')||(inBST == true)) {
			return "(GMT+1)";
		} else {
			return "(GMT)";
		}
	} else {
		var today = new Date();
		var offset = today.getTimezoneOffset()/60;
		offset = changeSign(offset);
		if (offset.indexOf("-0") > -1) {
			offset = '';
		}
		return "(GMT"+offset+")";
	}
}

function changeSign(offset) {
	var s = offset.toString();
	if (s.indexOf("-") > -1) {
		s = s.replace("-","+")
	} else {
		s = "-"+s;
	}
	return s;
}

function changeTime(t, d, inBST, adj) {
	if (!adj) {
		return t;
	} else {
		var date = stringToDate(t, d);    
		date = toLocalTimeZone(date, inBST); 
		return addPadding(date.getHours().toString(),2)+":"+addPadding(date.getMinutes().toString(),2);
	}
}

function changeDateandTime(t, d, inBST, adj) {
	if (!adj) {
		return t;
	} else {
		var date = stringToDate(t, d);    
		date = toLocalTimeZone(date, inBST); 
		return addPadding(date.getDate(),2)+"-"+addPadding((date.getMonth()+1).toString(),2)+" "+addPadding(date.getHours().toString(),2)+":"+addPadding(date.getMinutes().toString(),2);
	}
}

function changeNext5Time(e, inBST, adj) {
	var r = e;
	if ((adj==true)||(adj=='true')) {
		if (r.indexOf(":") > -1) {
			r = handleTopNextTime(r, inBST, adj);
		}
	}
	return r;
}  

function changeTop5DateandTime(e, d, inBST, adj) {
	var r = e;
	var td = d;
	if ((adj==true)||(adj=='true')) {
		if (r.indexOf(":") > -1) {
			r = handleTopNextTime(r, inBST, adj);
		}
		if (td.indexOf(":") > -1) {
			td = handleTopNextTimeDate(td, inBST, adj);
		}
	}
	return r + " - " + td;
}

function handleTopNextTime(rr, inBST, adj) {
	var r = rr;
	var _r = rr.split(":");
	if ((_r[0])&&(_r[1])) {
		var r1 = _r[0].substring(0, _r[0].length-2);
		var r2 = _r[0].substring(_r[0].length-2, _r[0].length);
		var r3 = _r[1].substring(0, 2);
		var r4 = _r[1].substring(2, _r[1].length);
		if ((parseFloat(r2) > 1)&&((parseFloat(r3) > 1)||(r3=='00')||(r3=='01'))) {
			var t = r2+":"+r3;
			_r = stringToDate(t, null)
			_r = toLocalTimeZone(_r, inBST); 
			r = r1+" "+addPadding(_r.getHours().toString(),2)+":"+addPadding(_r.getMinutes().toString(),2)+" "+r4;
			var o = displayGMToffset(inBST, adj).toString();
			
			var x = r.replace("BST", "#tz#");
			x = x.replace("GMT", "#tz#");
			r = x.replace("#tz#", o);
		}
	}
	return r;
}

function handleTopNextTimeDate(rr, inBST, adj) {
	var r = rr;
	var _r = rr.split(":");
	if ((_r[0])&&(_r[1])) {
		var r1 = _r[0].substring(_r[0].length-2, _r[0].length);
		var r2 = _r[1].substring(0, 2);
		var r3 = _r[1].substring(2, _r[1].length);
		var d = null;
		
		if (r3.toUpperCase().indexOf("TODAY") == -1) {
			d = r3;
		}
		if ((parseFloat(r1) > 1)&&((parseFloat(r2) > 1)||(r2=='00')||(r2=='01'))) {
			var t = r1+":"+r2;
			_r = stringToDate(t, d)
			_r = toLocalTimeZone(_r, inBST); 
			var o = displayGMToffset(inBST, adj).toString();
			r = addPadding(_r.getHours().toString(),2)+":"+addPadding(_r.getMinutes().toString(),2)+" "+o+" ";
			var r4 = r3;
			if (r3.toUpperCase().indexOf("TODAY") == -1) {
				r4 = addPadding(_r.getDate().toString(),2)+"/"+addPadding((_r.getMonth()+1),2)+"/"+_r.getYear();
			}
			r += r4;
		}
	}
	return r;
}