
// Util : utilities
Util = {};

Util.weekDays = new Array ("Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat");
Util.shortWeekDays = new Array ("S", "M", "T", "W", "T", "F", "S");
Util.months	= new Array("JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");

// Extract parameter from query-string
Util.getParameter = function(key, qs) {
	var params = {};
	
	if(!isDefined(qs))
		qs = location.search.substring( 1, location.search.length);

	qs = qs.replace(/\+/g, ' ');
	var args = qs.split('&');
	
	var value, pair, name;
	for(var i=0; i<args.length; i++) {
		pair = args[i].split('=');
		name = unescape(pair[0]);

		if(pair.length == 2)
		    value = unescape(pair[1]);
		else
			value = "";
		params[name] = value;
	}
	
	if(!isDefined(params[key]))
	    return "";
    else
        return params[key];
};

// Trim string
Util.trim = function(str) {
    var re;
    re = new RegExp("^[ ]+", "g");
    str = str.replace(re, "");
    re = new RegExp("[ ]+$", "g");    
    str = str.replace(re, "");
    return str;
};

// Convert spaces to non-breaking spaces
Util.convertNBSP = function(str) {
    var html = str, re;
    re = new RegExp(" ", "g");
    html = html.replace(re, "&#160;");
    return html;
};

// Utility function for paging
Util.paging = function(dataArr, noOfCells, curPageNum, pagingCells) {    
    var params = { startIndex: -1, stopIndex: -1, showPrev: false, showNext: false, pageNumStart: -1, pageNumEnd: -1, noOfPages: 0 };
    
    if(isEmpty(dataArr)) {
        return params;
    }

	if(noOfCells == 0)
		return params;

	if(curPageNum <= 0)
		curPageNum = 1;
	params.noOfPages = Math.ceil(dataArr.length / noOfCells);
	if(curPageNum > params.noOfPages)
		curPageNum = params.noOfPages;
	params.curPageNum = curPageNum;

	params.startIndex = noOfCells * (curPageNum-1);
    params.stopIndex = params.startIndex+noOfCells-1;
    if(params.stopIndex >= dataArr.length)
		params.stopIndex = dataArr.length-1; 

	if(params.startIndex > 0)
		params.showPrev = true;
	if(params.stopIndex < dataArr.length-1) 
		params.showNext = true;

	if(isDefined(pagingCells)) {
		params.pageNumStart = curPageNum - parseInt(pagingCells/2);
		if(params.pageNumStart <= 0)
			params.pageNumStart = 1;

		params.pageNumEnd = params.pageNumStart + pagingCells - 1; 
		if(params.pageNumEnd > params.noOfPages) 
			params.pageNumEnd = params.noOfPages;
	}
	
	return params;        
};

// Get date object from string (YYYYMMDDhhmm)
Util.getDate = function(str) {
	var year = parseInt(str.substring(0, 4), 10);
	var month = parseInt(str.substring(4, 6), 10) - 1;
	var date = parseInt(str.substring(6, 8), 10);
	var hour = parseInt(str.substring(8, 10), 10);
	var min = parseInt(str.substring(10, 12), 10);

	return new Date( year, month, date, hour, min);
};

// Get date object from string (YYYYMMDDhhmm)
Util.parseDate = function(str) {
	var arr = str.split("-");
	var year = "20" + arr[2];
	var month = parseInt(arr[1], 10)-1;
	var date = arr[0];
	
	return new Date( year, month, date, 0, 0);
};

// Get date in format ( Wed, 13 Jun )
Util.getDateStr = function(dt) {
	var date = dt.getDate().toString();
	if(date.length == 1) date = "0"+date;
	return Util.weekDays[dt.getDay()] + ", " + date + " " + Util.months[dt.getMonth()];
};

// Get date in format ( Wed, 13 Jun 08)
Util.getDateYrStr = function(dt) {
	var date = dt.getDate().toString();
	if(date.length == 1) date = "0"+date;
	return Util.weekDays[dt.getDay()] + ", " + date + " " + Util.months[dt.getMonth()] + " " + dt.getYear();
};

// Get time in format ( 07:00 )
Util.getTimeStr = function(dt) {
	var hr = dt.getHours().toString();	
	if(hr.length == 1)	hr = "0"+hr;
	var min = dt.getMinutes().toString(); 
	if(min.length == 1)	min = "0"+min;
	return hr + ":" + min; 
};

// Get duration in format ( 1h 55m )
Util.getDurStr = function(d) {
	var hr = d.hours;	
	var min = d.minutes; 
	return hr + "h " + min + "m"; 
};

// Get duration in format ( 1h 55m )
Util.getIntlDurStr = function(d) {
	var hr = d.hours;	
	var min = d.minutes; 
	return hr + " " + "hrs " + min  + " " + "mins"; 
};

Util.formatInt = function(val, digits)
{
    var preFix = "00000";
    var str = (preFix + val);
    return str.substr(str.length - digits, str.length - 1);
};

Util.round = function(val, places)
{
    var mult = Mat.pow(10, places);
    return Math.ceil(val * mult)/mult;
};

// Compare two times
Util.compareTimes = function(dt1, dt2, dateOnly) {
	dateOnly = dateOnly || false;
	var v1, v2, i, func;
	func = (dateOnly) ? ["getFullYear", "getMonth", "getDate"]
					: ["getFullYear", "getMonth", "getDate", "getHours", "getMinutes"];
	for(i=0; i<func.length; i++) {
		v1 = dt1[func[i]]();
		v2 = dt2[func[i]]();
		if(v1 != v2)
			return v1-v2;
	}
	return 0;
};

// Generic compare function 
Util.compare = function(pr) {
	return function(v1, v2) {
		if(isString(v1.get(pr)))
			return v1.get(pr).localeCompare(v2.get(pr));
		else if(isNumeric(v1.get(pr)))
			return v1.get(pr)-v2.get(pr);
		else if(isDate(v1.get(pr)))
		    return Util.compareTimes(v1.get(pr), v2.get(pr), false);
	}
};

// Format date
Util.formatDate = function(dt, f)
{
    var d = dt;

    return f.replace(/(yyyy|yy|mmmm|mmm|mm|dddd|ddd|dd|hh|nn|ss|a\/p)/g,
        function($1)
        {
            switch ($1.toLowerCase())
            {            
            case 'yyyy': return d.getFullYear();
            case 'yy': return Util.formatInt(d.getFullYear(), 2);
            case 'mmmm': return Util.months[d.getMonth()];
            case 'mmm':  return Util.months[d.getMonth()].substr(0, 3);
            case 'mm':   return Util.formatInt((d.getMonth() + 1), 2);
            case 'dddd': return Util.weekDays[d.getDay()];
            case 'ddd':  return Util.weekDays[d.getDay()].substr(0, 3);
            case 'dd':   return Util.formatInt(d.getDate(), 2);
            case 'hh':   return Util.formatInt(d.getHours(), 2);
            case 'HH':   return Util.formatInt(((h = d.getHours() % 12) ? h : 12), 2);
            case 'nn':   return Util.formatInt(d.getMinutes(), 2);
            case 'ss':   return Util.formatInt(d.getSeconds(), 2);
            case 'a/p':  return d.getHours() < 12 ? 'a' : 'p';
            }
        }
    );
};

var newwindow;
function popUP(url)
{
	newwindow=window.open(url,'name','height=480,width=650,scrollbars=yes');
	if (window.focus) {newwindow.focus()}
}

/*function showFareRules2121(menucontents, obj, e, tipwidth)
{
   alert("2...");
   if ((ie||ns6) && document.getElementById("hintbox"))
   {
        dropmenuobj=document.getElementById("hintbox")
        dropmenuobj.innerHTML=menucontents
        dropmenuobj.style.left=dropmenuobj.style.top=-500
        if (tipwidth!="")
        {
        dropmenuobj.widthobj=dropmenuobj.style
        dropmenuobj.widthobj.width=tipwidth
        }
        dropmenuobj.x=getposOffset(obj, "left") - 260
        dropmenuobj.y=getposOffset(obj, "top") - 20
        dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+obj.offsetWidth+"px"
        dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+"px"
        dropmenuobj.style.visibility="visible"
        obj.onmouseout=hidetip
   }
}*/

var horizontal_offset="9px" //horizontal offset of hint box from anchor link

/////No further editting needed

var vertical_offset="0" //horizontal offset of hint box from anchor link. No need to change.
var ie=document.all
var ns6=document.getElementById&&!document.all

function getposOffset(what, offsettype)
{
    var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
    var parentEl=what.offsetParent;
    while (parentEl!=null)
    {
    totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
    parentEl=parentEl.offsetParent;
    }
   return totaloffset;
}

function iecompattest()
{
    return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function clearbrowseredge(obj, whichedge)
{
    var edgeoffset=(whichedge=="rightedge")? parseInt(horizontal_offset)*-1 : parseInt(vertical_offset)*-1
    if (whichedge=="rightedge")
    {
    var windowedge=ie && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-30 : window.pageXOffset+window.innerWidth-40
    dropmenuobj.contentmeasure=dropmenuobj.offsetWidth
    if (windowedge-dropmenuobj.x < dropmenuobj.contentmeasure)
    edgeoffset=dropmenuobj.contentmeasure+obj.offsetWidth+parseInt(horizontal_offset)
    }
    else
    {
        var windowedge=ie && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18
        dropmenuobj.contentmeasure=dropmenuobj.offsetHeight
        if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure)
        edgeoffset=dropmenuobj.contentmeasure-obj.offsetHeight
    }
return edgeoffset
}

function showhint(menucontents, obj, e, tipwidth)
{
   //alert(obj);
   if ((ie||ns6) && document.getElementById("hintbox"))
   {
        dropmenuobj=document.getElementById("hintbox")        
        dropmenuobj.innerHTML=menucontents
        dropmenuobj.style.left=dropmenuobj.style.top=-500
        if (tipwidth!="")
        {
            dropmenuobj.widthobj=dropmenuobj.style
            dropmenuobj.widthobj.width=tipwidth
        }
        dropmenuobj.x=getposOffset(obj, "left")
        dropmenuobj.y=getposOffset(obj, "top")
        dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+obj.offsetWidth+"px"
        dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+"px"
        //alert(dropmenuobj.x + " - " + clearbrowseredge(obj, "rightedge") + " - " + obj.offsetWidth + " - " + "px");
        dropmenuobj.style.visibility="visible"
        obj.onmouseout=hidetip
   }
}

function hidetip(e)
{
    dropmenuobj.style.visibility="hidden"
    dropmenuobj.style.left="-500px"
}

function createhintbox()
{
    var divblock=document.createElement("div")
    divblock.setAttribute("id", "hintbox")
    document.body.appendChild(divblock)
}

if (window.addEventListener)
  window.addEventListener("load", createhintbox, false)
else if (window.attachEvent)
  window.attachEvent("onload", createhintbox)
else if (document.getElementById)
  window.onload=createhintbox

function taCount(obj,e)
{
 var taObj=obj;
 if (taObj.value.length > 100)
 taObj.value=taObj.value.substring(0,100);
}