// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

function getSelectedValue(select_obj, parameter) {
    var sel_index = select_obj.options.selectedIndex;
    // pass the parameter if you want to get back the result like
    // id=25, where 25 is the value of the selected option. 
    // I am calling this function in :with attribute of 
    // remote_function helper. If you don't pass the parameter, then
    // the else part is executed and the value of the selected option alone
    // will be returned.
    if(parameter != undefined) {
        return parameter + "=" + select_obj.options[sel_index].value;
    }
    else {
        return select_obj.options[sel_index].value;
    }
}


function reset_feedback_form(prefix) {
    $(prefix + '_email').value = "";
    $(prefix + '_message').value = "";
    //$(prefix + '_photo').value = "";
}

function show_tab(tab_title) {
    switch(tab_title) {
        case 'traffic' : $('maintabs').tabber.tabShow(0);break;
        case 'directions' : $('maintabs').tabber.tabShow(1); break;
        case 'buses' : $('maintabs').tabber.tabShow(2); break;
    }
}

function toggle_cities() {
    el = $('other_cities');
    if(el.style.display == "none") {
        Effect.SlideDown('other_cities');
    }
    else {
        Effect.SlideUp('other_cities');
    }
}

// opens a new browser window and loads it with the given url
function myPopup(mylink, windowname){
    if (! window.focus)return true;
    var href;
    if (typeof(mylink) == 'string')
        href=mylink;
    else
        href=mylink.href;
    window.open(href, windowname, 'width=600,height=270,scrollbars=yes');
    return false;
}

// Method called in case of results found for area-code.
function goto_search_result(area) {
    // Scroll to search result
    $(area).scrollIntoView(false);
    // Highlight result
    _bgcolor = $(area).getStyle('background-color');
    $(area).style.backgroundColor = '#F7DE21';
    
    // Remove highlight
    setTimeout("$('" + area + "').style.backgroundColor = '" + _bgcolor + "';", 10000);
}

// Method called in case of no results for area-code.
function no_search_result(textbox){
    $(textbox).style.backgroundColor = '#FF6633';
    setTimeout("$('" + textbox + "').style.backgroundColor = 'white'", 5000);
}

function send_message(button, id) {
    var msg = $("msg_" + id).value;
    if( ($("from_"+id).value.length > 0) && (msg.length > 0) ){
        button.value="Sending....";
        button.disabled = true;
        button.form.onsubmit();
        return;
    }
    alert('Please provide valid input');
}

function reset_form(form_obj) {
    form_obj.reset();
}

function reset_preferences_form() {
    form_obj = $('preferences_form');
    if(form_obj != null) {
        form_obj.reset();
    }
    $("mobile_no").value = "";
    $("name").value = "";
    Element.hide('preferences_form_container');
    window.scrollTo(0,0);
}

function check_availability() {
    mobileno = $('mobile_no').value;
    name = $('name').value;
    if(mobileno == "" || name == "") {
        alert('Please enter the mobile number and name');
        return;
    }
    new Ajax.Request('/carpool/check_availability?mobile_no='+mobileno+'&name='+name, {method: 'get', asynchronous: true, evalScripts: true, 
        onLoading: function() { Element.show('loading_indicator');},
        onComplete: function() { Element.hide('loading_indicator');} });
}

/* The following two functions belongs to the 
Carpool Join functionality */

function reset_join_form() {
    $('name').value="";
    $('mobile_no').value="";
    $('begin_button').disabled=false;
    $('name').disabled=false;
    $('mobile_no').disabled=false;
    $('preferences_form_container').hide();
    $('name').value = "";
    $('mobile_no').value =  "";
}

function disable_join_form() {
    $('name').disabled=true;
    $('mobile_no').disabled=true;
    $('begin_button').disabled=true;
}

function addStyleClass(div_id, style) {
    $(div_id).addClassName(style);
}

function removeStyleClass(div_id, style) {
    $(div_id).removeClassName(style);
}

function add_options(src_list_id, dest_list_id)
{
    src_options = $(src_list_id).options;
    dest_list = $(dest_list_id).options;
    deselect($(dest_list));
    for (var i = 0; i < src_options.length; i++)
        {
            if (src_options[i].selected && !isPresent(src_options[i], dest_list))
                {
                    option_element = Builder.node("option", { value : src_options[i].value , selected : true }, src_options[i].text);
                    $(dest_list_id).appendChild(option_element);
                }
            }
            
            deselect($(src_list_id).options);
            //selectAll(dest_list)
        }
        
        function selectAll(options) {
            for(var i=0;i<options.length;i++){
                options[i].selected = true;
            }
        }
        
        function isPresent(option, list)
        {
            for (var i=0;i<list.length;i++)
                {
                    if (list[i].value == option.value)
                        {
                            return true;
                        }
                    }
                    return false;
                }
                
                function deselect(options_list)
                {
                    for (var i=0;i<options_list.length;i++)
                        {
                            options_list[i].selected = false;
                        }
                    }
                    
                    function remove_selected(select_id) {
                        options = $(select_id).options;
                        for (var i=options.length-1; i>=0; i--)
                            {
                                if (options[i].selected)
                                    {
                                        Element.remove(options[i]);
                                    }
                                }
                            }
                            
                            function fnDispAlert()
                            {
                                if (show_alert) {
                                    new Ajax.Request('/main/disp_alert?page=' + pageNum, {asynchronous:true, evalScripts:true, method:'get'});
                                    pageNum++;
                                }
                            }
                            
                            function close_alert() {
                                $('alerts').innerHTML = "";
                                show_alert = false;
                            }
                            
                            function personalise() {
                                if(map.zoom <= 13) {
                                    alert("Please zoom in further to capture the exact location");
                                    return;
                                }
                                mc = map.getCenter();
                                var bounds = map.getExtent();
                                var auth_token;
                                new Ajax.Request('/main/get_authenticity_token', {method:'get',asynchronous: false, evalScripts:true, onComplete: function(res) { auth_token = eval("(" + res.responseText + ")").token; } })
                                pars = "zoom=" + map.zoom + "&lat=" + mc.lat + "&lon=" + mc.lon + "&top=" + bounds.top + "&left=" + bounds.left + "&right=" + bounds.right + "&bottom=" + bounds.bottom + "&authenticity_token=" + auth_token;
                                new Ajax.Request('/main/personalize', {asynchronous: true, evalScripts:true, parameters: pars, method:'post'})
                            }
                            
                            function populate_effective_and_earnings() {
                                scheduled_kms = $('revenue_collection_scheduled_kms').value;
                                cancelled_kms = $('revenue_collection_cancelled_kms').value;
                                effective_kms = scheduled_kms - cancelled_kms;
                                $('revenue_collection_effective_kms').value = effective_kms;
                                $('effective_kms').value = effective_kms;
                                revenue = $('revenue_collection_revenue').value;
                                earnings_per_km = revenue/effective_kms;
                                $('revenue_collection_earnings_per_km').value = earnings_per_km;
                                $('earnings_per_km').value = earnings_per_km;
                            }
                            
                            function populate_earnings_per_km() {
                                effective_kms = $('revenue_collection_effective_kms').value; 
                                revenue = $('revenue_collection_revenue').value;
                                earnings_per_km = revenue/effective_kms;
                                $('revenue_collection_earnings_per_km').value = earnings_per_km;
                            }
                            
                            function hideAckMessage() {
                                if($('http_msg')) {
                                    $('http_msg').innerHTML="";
                                    Element.hide('http_msg');
                                }
                            }
                            
                            function cancel_carpool_edit() {
                                $('pooler-prefs').innerHTML="";
                                $('cp-edit-form').show();
                                $('mobileno').value='Your Mobile Number';
                                ls.hideAll();
                                map.zoomTo(11);
                            }
                            
                            function toggle_details(id) {
                                Effect.toggle(id, 'slide');
                                visible = Element.getStyle(id, 'display');
                                if (visible == "block") {
                                    $('view-details-link-'+id).innerHTML = "&nbsp;(View Details)&nbsp;";
                                }
                                else {
                                    $('view-details-link-' +id).innerHTML = "&nbsp;(Hide Details)&nbsp;";
                                }
                            }
                            
                            var traffic_delays;
                            var pageNum = 0;
                            var show_alert = true;
                            
                            function filter_buses(route_no) {
                                Element.show("spinner");
                                var _keys = { lat : 'lat', lon : 'lon', label : 'desc', root : 'locations' };
                                if(route_no == undefined || route_no == null) {
                                    bus_no = $('routeno').options[$('routeno').options.selectedIndex].value;
                                }
                                else {
                                    bus_no = route_no;
                                }
                                var filtered_array = [];
                                var filtered_array_index = 0;
                                var buses = bus_tracking_info.locations;
                                extended_route = (bus_no.match(/[A-z]+$/) == null) ? false : true;
                                for(var i=0;i<buses.length;i++) {
                                    _hash = $H(buses[i]);
                                    if(  extended_route && _hash.get("desc").startsWith(bus_no) ) {
                                        filtered_array[filtered_array_index] = _hash;
                                        filtered_array_index = filtered_array_index + 1;
                                    }	
                                    else if( !extended_route && _hash.get("base_route") == bus_no ) {
                                        filtered_array[filtered_array_index] = _hash;
                                        filtered_array_index = filtered_array_index + 1;
                                    }
                                }
                                if(filtered_array.length==0) {
                                    alert("Sorry! We don't have location information for buses on this route.");
                                    Element.hide("spinner");
                                    $('routeno').options.selectedIndex=0;
                                    return;
                                }
                                var filtered_hash = new Hash();
                                filtered_hash.set('locations', filtered_array);
                                BtisMap.showLocations(filtered_hash.toJSON(), _keys, 'bmtctrack', false);
                                Element.hide("spinner");
                            }
                            
                            // -------------------------------------------------------------------
                            // moveOptionUp(select_object)
                            //  Move selected option in a select list up one
                            // -------------------------------------------------------------------
                            function moveOptionUp(obj) {
                                if (!hasOptions(obj)) { return; }
                                for (i=0; i<obj.options.length; i++) {
                                    if (obj.options[i].selected) {
                                        if (i != 0 && !obj.options[i-1].selected) {
                                            swapOptions(obj,i,i-1);
                                            obj.options[i-1].selected = true;
                                        }
                                    }
                                }
                            }
                            
                            // -------------------------------------------------------------------
                            // swapOptions(select_object,option1,option2)
                            //  Swap positions of two options in a select list
                            // -------------------------------------------------------------------
                            function swapOptions(obj,i,j) {
                                var o = obj.options;
                                var i_selected = o[i].selected;
                                var j_selected = o[j].selected;
                                var temp = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
                                var temp2= new Option(o[j].text, o[j].value, o[j].defaultSelected, o[j].selected);
                                o[i] = temp2;
                                o[j] = temp;
                                o[i].selected = j_selected;
                                o[j].selected = i_selected;
                            }
                            
                            // -------------------------------------------------------------------
                            // hasOptions(obj)
                            //  Utility function to determine if a select object has an options array
                            // -------------------------------------------------------------------
                            function hasOptions(obj) {
                                if (obj!=null && obj.options!=null) { return true; }
                                return false;
                            }
                            
                            // -------------------------------------------------------------------
                            // moveOptionDown(select_object)
                            //  Move selected option in a select list down one
                            // -------------------------------------------------------------------
                            function moveOptionDown(obj) {
                                if (!hasOptions(obj)) { return; }
                                for (i=obj.options.length-1; i>=0; i--) {
                                    if (obj.options[i].selected) {
                                        if (i != (obj.options.length-1) && ! obj.options[i+1].selected) {
                                            swapOptions(obj,i,i+1);
                                            obj.options[i+1].selected = true;
                                        }
                                    }
                                }
                            }
                            
                            function showLoadingIndicator(text) {
                                if(text != null && text != undefined) {
                                    $('loading_indicator_text').innerHTML = text;
                                }
                                $('loading_indicator').show();
                            }
                            
                            function hideLoadingIndicator() {
                                if($('loading_indicator')) {
                                    Element.hide('loading_indicator');
                                    $('loading_indicator_text').innerHTML = 'Loading.. Please wait..';
                                }
                            }
                            
                            


/*==================================================
  $Id: tabber.js,v 1.9 2006/04/27 20:51:51 pat Exp $
  tabber.js by Patrick Fitzgerald pat@barelyfitz.com

  Documentation can be found at the following URL:
  http://www.barelyfitz.com/projects/tabber/

  License (http://www.opensource.org/licenses/mit-license.php)

  Copyright (c) 2006 Patrick Fitzgerald

  Permission is hereby granted, free of charge, to any person
  obtaining a copy of this software and associated documentation files
  (the "Software"), to deal in the Software without restriction,
  including without limitation the rights to use, copy, modify, merge,
  publish, distribute, sublicense, and/or sell copies of the Software,
  and to permit persons to whom the Software is furnished to do so,
  subject to the following conditions:

  The above copyright notice and this permission notice shall be
  included in all copies or substantial portions of the Software.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  SOFTWARE.
  ==================================================*/

function tabberObj(argsObj, firsttab)
{
  var arg; /* name of an argument to override */

  /* Element for the main tabber div. If you supply this in argsObj,
     then the init() method will be called.
  */
  this.div = null;

  /* Class of the main tabber div */
  this.classMain = "tabber";

  /* Rename classMain to classMainLive after tabifying
     (so a different style can be applied)
  */
  this.classMainLive = "tabberlive";

  /* Class of each DIV that contains a tab */
  this.classTab = "tabbertab";

  /* Class to indicate which tab should be active on startup */
  this.classTabDefault = "tabbertabdefault";

  /* Class for the navigation UL */
  this.classNav = "tabbernav";

  /* When a tab is to be hidden, instead of setting display='none', we
     set the class of the div to classTabHide. In your screen
     stylesheet you should set classTabHide to display:none.  In your
     print stylesheet you should set display:block to ensure that all
     the information is printed.
  */
  this.classTabHide = "tabbertabhide";

  /* Class to set the navigation LI when the tab is active, so you can
     use a different style on the active tab.
  */
  this.classNavActive = "tabberactive";

  /* Elements that might contain the title for the tab, only used if a
     title is not specified in the TITLE attribute of DIV classTab.
  */
  this.titleElements = ['h2','h3','h4','h5','h6', 'font'];

  /* Should we strip out the HTML from the innerHTML of the title elements?
     This should usually be true.
  */
  this.titleElementsStripHTML = true;

  /* If the user specified the tab names using a TITLE attribute on
     the DIV, then the browser will display a tooltip whenever the
     mouse is over the DIV. To prevent this tooltip, we can remove the
     TITLE attribute after getting the tab name.
  */
  this.removeTitle = true;

  /* If you want to add an id to each link set this to true */
  this.addLinkId = false;

  /* If addIds==true, then you can set a format for the ids.
     <tabberid> will be replaced with the id of the main tabber div.
     <tabnumberzero> will be replaced with the tab number
       (tab numbers starting at zero)
     <tabnumberone> will be replaced with the tab number
       (tab numbers starting at one)
     <tabtitle> will be replaced by the tab title
       (with all non-alphanumeric characters removed)
   */
  this.linkIdFormat = '<tabberid>nav<tabnumberone>';

  /* You can override the defaults listed above by passing in an object:
     var mytab = new tabber({property:value,property:value});
  */
  for (arg in argsObj) { this[arg] = argsObj[arg]; }

  /* Create regular expressions for the class names; Note: if you
     change the class names after a new object is created you must
     also change these regular expressions.
  */
  this.REclassMain = new RegExp('\\b' + this.classMain + '\\b', 'gi');
  this.REclassMainLive = new RegExp('\\b' + this.classMainLive + '\\b', 'gi');
  this.REclassTab = new RegExp('\\b' + this.classTab + '\\b', 'gi');
  this.REclassTabDefault = new RegExp('\\b' + this.classTabDefault + '\\b', 'gi');
  this.REclassTabHide = new RegExp('\\b' + this.classTabHide + '\\b', 'gi');

  /* Array of objects holding info about each tab */
  this.tabs = new Array();

  /* If the main tabber div was specified, call init() now */
  if (this.div) {

    this.init(this.div);

    /* We don't need the main div anymore, and to prevent a memory leak
       in IE, we must remove the circular reference between the div
       and the tabber object. */
    this.div = null;
  }
}


/*--------------------------------------------------
  Methods for tabberObj
  --------------------------------------------------*/


tabberObj.prototype.init = function(e)
{
  /* Set up the tabber interface.

     e = element (the main containing div)

     Example:
     init(document.getElementById('mytabberdiv'))
   */

  var
  childNodes, /* child nodes of the tabber div */
  i, i2, /* loop indices */
  t, /* object to store info about a single tab */
  defaultTab=0, /* which tab to select by default */
  DOM_ul, /* tabbernav list */
  DOM_li, /* tabbernav list item */
  DOM_a, /* tabbernav link */
  aId, /* A unique id for DOM_a */
  headingElement; /* searching for text to use in the tab */

  /* Verify that the browser supports DOM scripting */
  if (!document.getElementsByTagName) { return false; }

  /* If the main DIV has an ID then save it. */
  if (e.id) {
    this.id = e.id;
  }

  /* Clear the tabs array (but it should normally be empty) */
  this.tabs.length = 0;

  /* Loop through an array of all the child nodes within our tabber element. */
  childNodes = e.childNodes;
  for(i=0; i < childNodes.length; i++) {

    /* Find the nodes where class="tabbertab" */
    if(childNodes[i].className &&
       childNodes[i].className.match(this.REclassTab)) {
      
      /* Create a new object to save info about this tab */
      t = new Object();
      
      /* Save a pointer to the div for this tab */
      t.div = childNodes[i];
      
      /* Add the new object to the array of tabs */
      this.tabs[this.tabs.length] = t;

      /* If the class name contains classTabDefault,
	 then select this tab by default.
      */
      if (childNodes[i].className.match(this.REclassTabDefault)) {
	defaultTab = this.tabs.length-1;
      }
    }
  }

  /* Create a new UL list to hold the tab headings */
  DOM_ul = document.createElement("ul");
  DOM_ul.className = this.classNav;
  
  /* Loop through each tab we found */
  for (i=0; i < this.tabs.length; i++) {

    t = this.tabs[i];

    /* Get the label to use for this tab:
       From the title attribute on the DIV,
       Or from one of the this.titleElements[] elements,
       Or use an automatically generated number.
     */
    t.headingText = t.div.title;

    /* Remove the title attribute to prevent a tooltip from appearing */
    if (this.removeTitle) { t.div.title = ''; }

    if (!t.headingText) {

      /* Title was not defined in the title of the DIV,
	 So try to get the title from an element within the DIV.
	 Go through the list of elements in this.titleElements
	 (typically heading elements ['h2','h3','h4'])
      */
      for (i2=0; i2<this.titleElements.length; i2++) {
	headingElement = t.div.getElementsByTagName(this.titleElements[i2])[0];
	if (headingElement) {
	  t.headingText = headingElement.innerHTML;
	  if (this.titleElementsStripHTML) {
	    t.headingText.replace(/<br>/gi," ");
	    t.headingText = t.headingText.replace(/<[^>]+>/g,"");
	  }
	  break;
	}
      }
    }

    if (!t.headingText) {
      /* Title was not found (or is blank) so automatically generate a
         number for the tab.
      */
      t.headingText = i + 1;
    }

    /* Create a list element for the tab */
    DOM_li = document.createElement("li");

    /* Save a reference to this list item so we can later change it to
       the "active" class */
    t.li = DOM_li;

    /* Create a link to activate the tab */
    DOM_a = document.createElement("a");
    DOM_a.appendChild(document.createTextNode(t.headingText));
    DOM_a.href = "javascript:void(null);";
    DOM_a.title = t.headingText;
    DOM_a.onclick = this.navClick;
    if (i==0) { DOM_a.setAttribute('style', 'margin-left:0px;');}

    /* Add some properties to the link so we can identify which tab
       was clicked. Later the navClick method will need this.
    */
    DOM_a.tabber = this;
    DOM_a.tabberIndex = i;

    /* Do we need to add an id to DOM_a? */
    if (this.addLinkId && this.linkIdFormat) {

      /* Determine the id name */
      aId = this.linkIdFormat;
      aId = aId.replace(/<tabberid>/gi, this.id);
      aId = aId.replace(/<tabnumberzero>/gi, i);
      aId = aId.replace(/<tabnumberone>/gi, i+1);
      aId = aId.replace(/<tabtitle>/gi, t.headingText.replace(/[^a-zA-Z0-9\-]/gi, ''));

      DOM_a.id = aId;
    }

    /* Add the link to the list element */
    DOM_li.appendChild(DOM_a);

    /* Add the list element to the list */
    DOM_ul.appendChild(DOM_li);
  }

  /* Add the UL list to the beginning of the tabber div */
  e.insertBefore(DOM_ul, e.firstChild);

  /* Make the tabber div "live" so different CSS can be applied */
  e.className = e.className.replace(this.REclassMain, this.classMainLive);

  /* Activate the default tab, and do not call the onclick handler */
  this.tabShow(defaultTab);

  /* If the user specified an onLoad function, call it now. */
  if (typeof this.onLoad == 'function') {
    this.onLoad({tabber:this});
  }

  return this;
};


tabberObj.prototype.navClick = function(event)
{
  /* This method should only be called by the onClick event of an <A>
     element, in which case we will determine which tab was clicked by
     examining a property that we previously attached to the <A>
     element.

     Since this was triggered from an onClick event, the variable
     "this" refers to the <A> element that triggered the onClick
     event (and not to the tabberObj).

     When tabberObj was initialized, we added some extra properties
     to the <A> element, for the purpose of retrieving them now. Get
     the tabberObj object, plus the tab number that was clicked.
  */

  var
  rVal, /* Return value from the user onclick function */
  a, /* element that triggered the onclick event */
  self, /* the tabber object */
  tabberIndex, /* index of the tab that triggered the event */
  onClickArgs; /* args to send the onclick function */

  a = this;
  if (!a.tabber) { return false; }

  self = a.tabber;
  tabberIndex = a.tabberIndex;

  /* Remove focus from the link because it looks ugly.
     I don't know if this is a good idea...
  */
  a.blur();

  /* If the user specified an onClick function, call it now.
     If the function returns false then do not continue.
  */
  if (typeof self.onClick == 'function') {

    onClickArgs = {'tabber':self, 'index':tabberIndex, 'event':event};

    /* IE uses a different way to access the event object */
    if (!event) { onClickArgs.event = window.event; }

    rVal = self.onClick(onClickArgs);
    if (rVal === false) { return false; }
  }

  self.tabShow(tabberIndex);

  return false;
};


tabberObj.prototype.tabHideAll = function()
{
  var i; /* counter */

  /* Hide all tabs and make all navigation links inactive */
  for (i = 0; i < this.tabs.length; i++) {
    this.tabHide(i);
  }
};


tabberObj.prototype.tabHide = function(tabberIndex)
{
  var div;

  if (!this.tabs[tabberIndex]) { return false; }

  /* Hide a single tab and make its navigation link inactive */
  div = this.tabs[tabberIndex].div;

  /* Hide the tab contents by adding classTabHide to the div */
  if (!div.className.match(this.REclassTabHide)) {
    div.className += ' ' + this.classTabHide;
  }
  this.navClearActive(tabberIndex);

  return this;
};


tabberObj.prototype.tabShow = function(tabberIndex)
{
  /* Show the tabberIndex tab and hide all the other tabs */

  var div;

  if (!this.tabs[tabberIndex]) { return false; }

  /* Hide all the tabs first */
  this.tabHideAll();

  /* Get the div that holds this tab */
  div = this.tabs[tabberIndex].div;

  /* Remove classTabHide from the div */
  div.className = div.className.replace(this.REclassTabHide, '');

  /* Mark this tab navigation link as "active" */
  this.navSetActive(tabberIndex);

  /* If the user specified an onTabDisplay function, call it now. */
  if (typeof this.onTabDisplay == 'function') {
    this.onTabDisplay({'tabber':this, 'index':tabberIndex});
  }

  return this;
};

tabberObj.prototype.navSetActive = function(tabberIndex)
{
  /* Note: this method does *not* enforce the rule
     that only one nav item can be active at a time.
  */

  /* Set classNavActive for the navigation list item */
  this.tabs[tabberIndex].li.className = this.classNavActive;

  return this;
};


tabberObj.prototype.navClearActive = function(tabberIndex)
{
  /* Note: this method does *not* enforce the rule
     that one nav should always be active.
  */

  /* Remove classNavActive from the navigation list item */
  this.tabs[tabberIndex].li.className = '';

  return this;
};


/*==================================================*/


function tabberAutomatic(tabberArgs)
{
  /* This function finds all DIV elements in the document where
     class=tabber.classMain, then converts them to use the tabber
     interface.

     tabberArgs = an object to send to "new tabber()"
  */
  var
    tempObj, /* Temporary tabber object */
    divs, /* Array of all divs on the page */
    i; /* Loop index */

  if (!tabberArgs) { tabberArgs = {}; }

  /* Create a tabber object so we can get the value of classMain */
  tempObj = new tabberObj(tabberArgs, false);

  /* Find all DIV elements in the document that have class=tabber */

  /* First get an array of all DIV elements and loop through them */
  divs = document.getElementsByTagName("div");
  for (i=0; i < divs.length; i++) {
    firsttab = false;
    /* Is this DIV the correct class? */
    if (divs[i].className &&
	divs[i].className.match(tempObj.REclassMain)) {
      
      /* Now tabify the DIV */
      tabberArgs.div = divs[i];
      if(i==0) { firsttab = true; }
	   //alert(i + '-' + firsttab);
      divs[i].tabber = new tabberObj(tabberArgs, firsttab);
    }
  }
  
  return this;
}


/*==================================================*/


function tabberAutomaticOnLoad(tabberArgs)
{
  /* This function adds tabberAutomatic to the window.onload event,
     so it will run after the document has finished loading.
  */
  var oldOnLoad;

  if (!tabberArgs) { tabberArgs = {}; }

  /* Taken from: http://simon.incutio.com/archive/2004/05/26/addLoadEvent */

  oldOnLoad = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = function() {
      tabberAutomatic(tabberArgs);
    };
  } else {
    window.onload = function() {
      oldOnLoad();
      tabberAutomatic(tabberArgs);
    };
  }
}


/*==================================================*/


/* Run tabberAutomaticOnload() unless the "manualStartup" option was specified */

if (typeof tabberOptions == 'undefined') {

    tabberAutomaticOnLoad();

} else {

  if (!tabberOptions['manualStartup']) {
    tabberAutomaticOnLoad(tabberOptions);
  }

}


// Copyright (c) 2005-2008 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005-2008 Sammi Williams (http://www.oriontransfer.co.nz, sammi@oriontransfer.co.nz)
//
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

if(Object.isUndefined(Effect))
  throw("dragdrop.js requires including script.aculo.us' effects.js library");

var Droppables = {
  drops: [],

  remove: function(element) {
    this.drops = this.drops.reject(function(d) { return d.element==$(element) });
  },

  add: function(element) {
    element = $(element);
    var options = Object.extend({
      greedy:     true,
      hoverclass: null,
      tree:       false
    }, arguments[1] || { });

    // cache containers
    if(options.containment) {
      options._containers = [];
      var containment = options.containment;
      if(Object.isArray(containment)) {
        containment.each( function(c) { options._containers.push($(c)) });
      } else {
        options._containers.push($(containment));
      }
    }

    if(options.accept) options.accept = [options.accept].flatten();

    Element.makePositioned(element); // fix IE
    options.element = element;

    this.drops.push(options);
  },

  findDeepestChild: function(drops) {
    deepest = drops[0];

    for (i = 1; i < drops.length; ++i)
      if (Element.isParent(drops[i].element, deepest.element))
        deepest = drops[i];

    return deepest;
  },

  isContained: function(element, drop) {
    var containmentNode;
    if(drop.tree) {
      containmentNode = element.treeNode;
    } else {
      containmentNode = element.parentNode;
    }
    return drop._containers.detect(function(c) { return containmentNode == c });
  },

  isAffected: function(point, element, drop) {
    return (
      (drop.element!=element) &&
      ((!drop._containers) ||
        this.isContained(element, drop)) &&
      ((!drop.accept) ||
        (Element.classNames(element).detect(
          function(v) { return drop.accept.include(v) } ) )) &&
      Position.within(drop.element, point[0], point[1]) );
  },

  deactivate: function(drop) {
    if(drop.hoverclass)
      Element.removeClassName(drop.element, drop.hoverclass);
    this.last_active = null;
  },

  activate: function(drop) {
    if(drop.hoverclass)
      Element.addClassName(drop.element, drop.hoverclass);
    this.last_active = drop;
  },

  show: function(point, element) {
    if(!this.drops.length) return;
    var drop, affected = [];

    this.drops.each( function(drop) {
      if(Droppables.isAffected(point, element, drop))
        affected.push(drop);
    });

    if(affected.length>0)
      drop = Droppables.findDeepestChild(affected);

    if(this.last_active && this.last_active != drop) this.deactivate(this.last_active);
    if (drop) {
      Position.within(drop.element, point[0], point[1]);
      if(drop.onHover)
        drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element));

      if (drop != this.last_active) Droppables.activate(drop);
    }
  },

  fire: function(event, element) {
    if(!this.last_active) return;
    Position.prepare();

    if (this.isAffected([Event.pointerX(event), Event.pointerY(event)], element, this.last_active))
      if (this.last_active.onDrop) {
        this.last_active.onDrop(element, this.last_active.element, event);
        return true;
      }
  },

  reset: function() {
    if(this.last_active)
      this.deactivate(this.last_active);
  }
};

var Draggables = {
  drags: [],
  observers: [],

  register: function(draggable) {
    if(this.drags.length == 0) {
      this.eventMouseUp   = this.endDrag.bindAsEventListener(this);
      this.eventMouseMove = this.updateDrag.bindAsEventListener(this);
      this.eventKeypress  = this.keyPress.bindAsEventListener(this);

      Event.observe(document, "mouseup", this.eventMouseUp);
      Event.observe(document, "mousemove", this.eventMouseMove);
      Event.observe(document, "keypress", this.eventKeypress);
    }
    this.drags.push(draggable);
  },

  unregister: function(draggable) {
    this.drags = this.drags.reject(function(d) { return d==draggable });
    if(this.drags.length == 0) {
      Event.stopObserving(document, "mouseup", this.eventMouseUp);
      Event.stopObserving(document, "mousemove", this.eventMouseMove);
      Event.stopObserving(document, "keypress", this.eventKeypress);
    }
  },

  activate: function(draggable) {
    if(draggable.options.delay) {
      this._timeout = setTimeout(function() {
        Draggables._timeout = null;
        window.focus();
        Draggables.activeDraggable = draggable;
      }.bind(this), draggable.options.delay);
    } else {
      window.focus(); // allows keypress events if window isn't currently focused, fails for Safari
      this.activeDraggable = draggable;
    }
  },

  deactivate: function() {
    this.activeDraggable = null;
  },

  updateDrag: function(event) {
    if(!this.activeDraggable) return;
    var pointer = [Event.pointerX(event), Event.pointerY(event)];
    // Mozilla-based browsers fire successive mousemove events with
    // the same coordinates, prevent needless redrawing (moz bug?)
    if(this._lastPointer && (this._lastPointer.inspect() == pointer.inspect())) return;
    this._lastPointer = pointer;

    this.activeDraggable.updateDrag(event, pointer);
  },

  endDrag: function(event) {
    if(this._timeout) {
      clearTimeout(this._timeout);
      this._timeout = null;
    }
    if(!this.activeDraggable) return;
    this._lastPointer = null;
    this.activeDraggable.endDrag(event);
    this.activeDraggable = null;
  },

  keyPress: function(event) {
    if(this.activeDraggable)
      this.activeDraggable.keyPress(event);
  },

  addObserver: function(observer) {
    this.observers.push(observer);
    this._cacheObserverCallbacks();
  },

  removeObserver: function(element) {  // element instead of observer fixes mem leaks
    this.observers = this.observers.reject( function(o) { return o.element==element });
    this._cacheObserverCallbacks();
  },

  notify: function(eventName, draggable, event) {  // 'onStart', 'onEnd', 'onDrag'
    if(this[eventName+'Count'] > 0)
      this.observers.each( function(o) {
        if(o[eventName]) o[eventName](eventName, draggable, event);
      });
    if(draggable.options[eventName]) draggable.options[eventName](draggable, event);
  },

  _cacheObserverCallbacks: function() {
    ['onStart','onEnd','onDrag'].each( function(eventName) {
      Draggables[eventName+'Count'] = Draggables.observers.select(
        function(o) { return o[eventName]; }
      ).length;
    });
  }
};

/*--------------------------------------------------------------------------*/

var Draggable = Class.create({
  initialize: function(element) {
    var defaults = {
      handle: false,
      reverteffect: function(element, top_offset, left_offset) {
        var dur = Math.sqrt(Math.abs(top_offset^2)+Math.abs(left_offset^2))*0.02;
        new Effect.Move(element, { x: -left_offset, y: -top_offset, duration: dur,
          queue: {scope:'_draggable', position:'end'}
        });
      },
      endeffect: function(element) {
        var toOpacity = Object.isNumber(element._opacity) ? element._opacity : 1.0;
        new Effect.Opacity(element, {duration:0.2, from:0.7, to:toOpacity,
          queue: {scope:'_draggable', position:'end'},
          afterFinish: function(){
            Draggable._dragging[element] = false
          }
        });
      },
      zindex: 1000,
      revert: false,
      quiet: false,
      scroll: false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      snap: false,  // false, or xy or [x,y] or function(x,y){ return [x,y] }
      delay: 0
    };

    if(!arguments[1] || Object.isUndefined(arguments[1].endeffect))
      Object.extend(defaults, {
        starteffect: function(element) {
          element._opacity = Element.getOpacity(element);
          Draggable._dragging[element] = true;
          new Effect.Opacity(element, {duration:0.2, from:element._opacity, to:0.7});
        }
      });

    var options = Object.extend(defaults, arguments[1] || { });

    this.element = $(element);

    if(options.handle && Object.isString(options.handle))
      this.handle = this.element.down('.'+options.handle, 0);

    if(!this.handle) this.handle = $(options.handle);
    if(!this.handle) this.handle = this.element;

    if(options.scroll && !options.scroll.scrollTo && !options.scroll.outerHTML) {
      options.scroll = $(options.scroll);
      this._isScrollChild = Element.childOf(this.element, options.scroll);
    }

    Element.makePositioned(this.element); // fix IE

    this.options  = options;
    this.dragging = false;

    this.eventMouseDown = this.initDrag.bindAsEventListener(this);
    Event.observe(this.handle, "mousedown", this.eventMouseDown);

    Draggables.register(this);
  },

  destroy: function() {
    Event.stopObserving(this.handle, "mousedown", this.eventMouseDown);
    Draggables.unregister(this);
  },

  currentDelta: function() {
    return([
      parseInt(Element.getStyle(this.element,'left') || '0'),
      parseInt(Element.getStyle(this.element,'top') || '0')]);
  },

  initDrag: function(event) {
    if(!Object.isUndefined(Draggable._dragging[this.element]) &&
      Draggable._dragging[this.element]) return;
    if(Event.isLeftClick(event)) {
      // abort on form elements, fixes a Firefox issue
      var src = Event.element(event);
      if((tag_name = src.tagName.toUpperCase()) && (
        tag_name=='INPUT' ||
        tag_name=='SELECT' ||
        tag_name=='OPTION' ||
        tag_name=='BUTTON' ||
        tag_name=='TEXTAREA')) return;

      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      var pos     = Position.cumulativeOffset(this.element);
      this.offset = [0,1].map( function(i) { return (pointer[i] - pos[i]) });

      Draggables.activate(this);
      Event.stop(event);
    }
  },

  startDrag: function(event) {
    this.dragging = true;
    if(!this.delta)
      this.delta = this.currentDelta();

    if(this.options.zindex) {
      this.originalZ = parseInt(Element.getStyle(this.element,'z-index') || 0);
      this.element.style.zIndex = this.options.zindex;
    }

    if(this.options.ghosting) {
      this._clone = this.element.cloneNode(true);
      this._originallyAbsolute = (this.element.getStyle('position') == 'absolute');
      if (!this._originallyAbsolute)
        Position.absolutize(this.element);
      this.element.parentNode.insertBefore(this._clone, this.element);
    }

    if(this.options.scroll) {
      if (this.options.scroll == window) {
        var where = this._getWindowScroll(this.options.scroll);
        this.originalScrollLeft = where.left;
        this.originalScrollTop = where.top;
      } else {
        this.originalScrollLeft = this.options.scroll.scrollLeft;
        this.originalScrollTop = this.options.scroll.scrollTop;
      }
    }

    Draggables.notify('onStart', this, event);

    if(this.options.starteffect) this.options.starteffect(this.element);
  },

  updateDrag: function(event, pointer) {
    if(!this.dragging) this.startDrag(event);

    if(!this.options.quiet){
      Position.prepare();
      Droppables.show(pointer, this.element);
    }

    Draggables.notify('onDrag', this, event);

    this.draw(pointer);
    if(this.options.change) this.options.change(this);

    if(this.options.scroll) {
      this.stopScrolling();

      var p;
      if (this.options.scroll == window) {
        with(this._getWindowScroll(this.options.scroll)) { p = [ left, top, left+width, top+height ]; }
      } else {
        p = Position.page(this.options.scroll);
        p[0] += this.options.scroll.scrollLeft + Position.deltaX;
        p[1] += this.options.scroll.scrollTop + Position.deltaY;
        p.push(p[0]+this.options.scroll.offsetWidth);
        p.push(p[1]+this.options.scroll.offsetHeight);
      }
      var speed = [0,0];
      if(pointer[0] < (p[0]+this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[0]+this.options.scrollSensitivity);
      if(pointer[1] < (p[1]+this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[1]+this.options.scrollSensitivity);
      if(pointer[0] > (p[2]-this.options.scrollSensitivity)) speed[0] = pointer[0]-(p[2]-this.options.scrollSensitivity);
      if(pointer[1] > (p[3]-this.options.scrollSensitivity)) speed[1] = pointer[1]-(p[3]-this.options.scrollSensitivity);
      this.startScrolling(speed);
    }

    // fix AppleWebKit rendering
    if(Prototype.Browser.WebKit) window.scrollBy(0,0);

    Event.stop(event);
  },

  finishDrag: function(event, success) {
    this.dragging = false;

    if(this.options.quiet){
      Position.prepare();
      var pointer = [Event.pointerX(event), Event.pointerY(event)];
      Droppables.show(pointer, this.element);
    }

    if(this.options.ghosting) {
      if (!this._originallyAbsolute)
        Position.relativize(this.element);
      delete this._originallyAbsolute;
      Element.remove(this._clone);
      this._clone = null;
    }

    var dropped = false;
    if(success) {
      dropped = Droppables.fire(event, this.element);
      if (!dropped) dropped = false;
    }
    if(dropped && this.options.onDropped) this.options.onDropped(this.element);
    Draggables.notify('onEnd', this, event);

    var revert = this.options.revert;
    if(revert && Object.isFunction(revert)) revert = revert(this.element);

    var d = this.currentDelta();
    if(revert && this.options.reverteffect) {
      if (dropped == 0 || revert != 'failure')
        this.options.reverteffect(this.element,
          d[1]-this.delta[1], d[0]-this.delta[0]);
    } else {
      this.delta = d;
    }

    if(this.options.zindex)
      this.element.style.zIndex = this.originalZ;

    if(this.options.endeffect)
      this.options.endeffect(this.element);

    Draggables.deactivate(this);
    Droppables.reset();
  },

  keyPress: function(event) {
    if(event.keyCode!=Event.KEY_ESC) return;
    this.finishDrag(event, false);
    Event.stop(event);
  },

  endDrag: function(event) {
    if(!this.dragging) return;
    this.stopScrolling();
    this.finishDrag(event, true);
    Event.stop(event);
  },

  draw: function(point) {
    var pos = Position.cumulativeOffset(this.element);
    if(this.options.ghosting) {
      var r   = Position.realOffset(this.element);
      pos[0] += r[0] - Position.deltaX; pos[1] += r[1] - Position.deltaY;
    }

    var d = this.currentDelta();
    pos[0] -= d[0]; pos[1] -= d[1];

    if(this.options.scroll && (this.options.scroll != window && this._isScrollChild)) {
      pos[0] -= this.options.scroll.scrollLeft-this.originalScrollLeft;
      pos[1] -= this.options.scroll.scrollTop-this.originalScrollTop;
    }

    var p = [0,1].map(function(i){
      return (point[i]-pos[i]-this.offset[i])
    }.bind(this));

    if(this.options.snap) {
      if(Object.isFunction(this.options.snap)) {
        p = this.options.snap(p[0],p[1],this);
      } else {
      if(Object.isArray(this.options.snap)) {
        p = p.map( function(v, i) {
          return (v/this.options.snap[i]).round()*this.options.snap[i] }.bind(this));
      } else {
        p = p.map( function(v) {
          return (v/this.options.snap).round()*this.options.snap }.bind(this));
      }
    }}

    var style = this.element.style;
    if((!this.options.constraint) || (this.options.constraint=='horizontal'))
      style.left = p[0] + "px";
    if((!this.options.constraint) || (this.options.constraint=='vertical'))
      style.top  = p[1] + "px";

    if(style.visibility=="hidden") style.visibility = ""; // fix gecko rendering
  },

  stopScrolling: function() {
    if(this.scrollInterval) {
      clearInterval(this.scrollInterval);
      this.scrollInterval = null;
      Draggables._lastScrollPointer = null;
    }
  },

  startScrolling: function(speed) {
    if(!(speed[0] || speed[1])) return;
    this.scrollSpeed = [speed[0]*this.options.scrollSpeed,speed[1]*this.options.scrollSpeed];
    this.lastScrolled = new Date();
    this.scrollInterval = setInterval(this.scroll.bind(this), 10);
  },

  scroll: function() {
    var current = new Date();
    var delta = current - this.lastScrolled;
    this.lastScrolled = current;
    if(this.options.scroll == window) {
      with (this._getWindowScroll(this.options.scroll)) {
        if (this.scrollSpeed[0] || this.scrollSpeed[1]) {
          var d = delta / 1000;
          this.options.scroll.scrollTo( left + d*this.scrollSpeed[0], top + d*this.scrollSpeed[1] );
        }
      }
    } else {
      this.options.scroll.scrollLeft += this.scrollSpeed[0] * delta / 1000;
      this.options.scroll.scrollTop  += this.scrollSpeed[1] * delta / 1000;
    }

    Position.prepare();
    Droppables.show(Draggables._lastPointer, this.element);
    Draggables.notify('onDrag', this);
    if (this._isScrollChild) {
      Draggables._lastScrollPointer = Draggables._lastScrollPointer || $A(Draggables._lastPointer);
      Draggables._lastScrollPointer[0] += this.scrollSpeed[0] * delta / 1000;
      Draggables._lastScrollPointer[1] += this.scrollSpeed[1] * delta / 1000;
      if (Draggables._lastScrollPointer[0] < 0)
        Draggables._lastScrollPointer[0] = 0;
      if (Draggables._lastScrollPointer[1] < 0)
        Draggables._lastScrollPointer[1] = 0;
      this.draw(Draggables._lastScrollPointer);
    }

    if(this.options.change) this.options.change(this);
  },

  _getWindowScroll: function(w) {
    var T, L, W, H;
    with (w.document) {
      if (w.document.documentElement && documentElement.scrollTop) {
        T = documentElement.scrollTop;
        L = documentElement.scrollLeft;
      } else if (w.document.body) {
        T = body.scrollTop;
        L = body.scrollLeft;
      }
      if (w.innerWidth) {
        W = w.innerWidth;
        H = w.innerHeight;
      } else if (w.document.documentElement && documentElement.clientWidth) {
        W = documentElement.clientWidth;
        H = documentElement.clientHeight;
      } else {
        W = body.offsetWidth;
        H = body.offsetHeight;
      }
    }
    return { top: T, left: L, width: W, height: H };
  }
});

Draggable._dragging = { };

/*--------------------------------------------------------------------------*/

var SortableObserver = Class.create({
  initialize: function(element, observer) {
    this.element   = $(element);
    this.observer  = observer;
    this.lastValue = Sortable.serialize(this.element);
  },

  onStart: function() {
    this.lastValue = Sortable.serialize(this.element);
  },

  onEnd: function() {
    Sortable.unmark();
    if(this.lastValue != Sortable.serialize(this.element))
      this.observer(this.element)
  }
});

var Sortable = {
  SERIALIZE_RULE: /^[^_\-](?:[A-Za-z0-9\-\_]*)[_](.*)$/,

  sortables: { },

  _findRootElement: function(element) {
    while (element.tagName.toUpperCase() != "BODY") {
      if(element.id && Sortable.sortables[element.id]) return element;
      element = element.parentNode;
    }
  },

  options: function(element) {
    element = Sortable._findRootElement($(element));
    if(!element) return;
    return Sortable.sortables[element.id];
  },

  destroy: function(element){
    element = $(element);
    var s = Sortable.sortables[element.id];

    if(s) {
      Draggables.removeObserver(s.element);
      s.droppables.each(function(d){ Droppables.remove(d) });
      s.draggables.invoke('destroy');

      delete Sortable.sortables[s.element.id];
    }
  },

  create: function(element) {
    element = $(element);
    var options = Object.extend({
      element:     element,
      tag:         'li',       // assumes li children, override with tag: 'tagname'
      dropOnEmpty: false,
      tree:        false,
      treeTag:     'ul',
      overlap:     'vertical', // one of 'vertical', 'horizontal'
      constraint:  'vertical', // one of 'vertical', 'horizontal', false
      containment: element,    // also takes array of elements (or id's); or false
      handle:      false,      // or a CSS class
      only:        false,
      delay:       0,
      hoverclass:  null,
      ghosting:    false,
      quiet:       false,
      scroll:      false,
      scrollSensitivity: 20,
      scrollSpeed: 15,
      format:      this.SERIALIZE_RULE,

      // these take arrays of elements or ids and can be
      // used for better initialization performance
      elements:    false,
      handles:     false,

      onChange:    Prototype.emptyFunction,
      onUpdate:    Prototype.emptyFunction
    }, arguments[1] || { });

    // clear any old sortable with same element
    this.destroy(element);

    // build options for the draggables
    var options_for_draggable = {
      revert:      true,
      quiet:       options.quiet,
      scroll:      options.scroll,
      scrollSpeed: options.scrollSpeed,
      scrollSensitivity: options.scrollSensitivity,
      delay:       options.delay,
      ghosting:    options.ghosting,
      constraint:  options.constraint,
      handle:      options.handle };

    if(options.starteffect)
      options_for_draggable.starteffect = options.starteffect;

    if(options.reverteffect)
      options_for_draggable.reverteffect = options.reverteffect;
    else
      if(options.ghosting) options_for_draggable.reverteffect = function(element) {
        element.style.top  = 0;
        element.style.left = 0;
      };

    if(options.endeffect)
      options_for_draggable.endeffect = options.endeffect;

    if(options.zindex)
      options_for_draggable.zindex = options.zindex;

    // build options for the droppables
    var options_for_droppable = {
      overlap:     options.overlap,
      containment: options.containment,
      tree:        options.tree,
      hoverclass:  options.hoverclass,
      onHover:     Sortable.onHover
    };

    var options_for_tree = {
      onHover:      Sortable.onEmptyHover,
      overlap:      options.overlap,
      containment:  options.containment,
      hoverclass:   options.hoverclass
    };

    // fix for gecko engine
    Element.cleanWhitespace(element);

    options.draggables = [];
    options.droppables = [];

    // drop on empty handling
    if(options.dropOnEmpty || options.tree) {
      Droppables.add(element, options_for_tree);
      options.droppables.push(element);
    }

    (options.elements || this.findElements(element, options) || []).each( function(e,i) {
      var handle = options.handles ? $(options.handles[i]) :
        (options.handle ? $(e).select('.' + options.handle)[0] : e);
      options.draggables.push(
        new Draggable(e, Object.extend(options_for_draggable, { handle: handle })));
      Droppables.add(e, options_for_droppable);
      if(options.tree) e.treeNode = element;
      options.droppables.push(e);
    });

    if(options.tree) {
      (Sortable.findTreeElements(element, options) || []).each( function(e) {
        Droppables.add(e, options_for_tree);
        e.treeNode = element;
        options.droppables.push(e);
      });
    }

    // keep reference
    this.sortables[element.id] = options;

    // for onupdate
    Draggables.addObserver(new SortableObserver(element, options.onUpdate));

  },

  // return all suitable-for-sortable elements in a guaranteed order
  findElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.tag);
  },

  findTreeElements: function(element, options) {
    return Element.findChildren(
      element, options.only, options.tree ? true : false, options.treeTag);
  },

  onHover: function(element, dropon, overlap) {
    if(Element.isParent(dropon, element)) return;

    if(overlap > .33 && overlap < .66 && Sortable.options(dropon).tree) {
      return;
    } else if(overlap>0.5) {
      Sortable.mark(dropon, 'before');
      if(dropon.previousSibling != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, dropon);
        if(dropon.parentNode!=oldParentNode)
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    } else {
      Sortable.mark(dropon, 'after');
      var nextElement = dropon.nextSibling || null;
      if(nextElement != element) {
        var oldParentNode = element.parentNode;
        element.style.visibility = "hidden"; // fix gecko rendering
        dropon.parentNode.insertBefore(element, nextElement);
        if(dropon.parentNode!=oldParentNode)
          Sortable.options(oldParentNode).onChange(element);
        Sortable.options(dropon.parentNode).onChange(element);
      }
    }
  },

  onEmptyHover: function(element, dropon, overlap) {
    var oldParentNode = element.parentNode;
    var droponOptions = Sortable.options(dropon);

    if(!Element.isParent(dropon, element)) {
      var index;

      var children = Sortable.findElements(dropon, {tag: droponOptions.tag, only: droponOptions.only});
      var child = null;

      if(children) {
        var offset = Element.offsetSize(dropon, droponOptions.overlap) * (1.0 - overlap);

        for (index = 0; index < children.length; index += 1) {
          if (offset - Element.offsetSize (children[index], droponOptions.overlap) >= 0) {
            offset -= Element.offsetSize (children[index], droponOptions.overlap);
          } else if (offset - (Element.offsetSize (children[index], droponOptions.overlap) / 2) >= 0) {
            child = index + 1 < children.length ? children[index + 1] : null;
            break;
          } else {
            child = children[index];
            break;
          }
        }
      }

      dropon.insertBefore(element, child);

      Sortable.options(oldParentNode).onChange(element);
      droponOptions.onChange(element);
    }
  },

  unmark: function() {
    if(Sortable._marker) Sortable._marker.hide();
  },

  mark: function(dropon, position) {
    // mark on ghosting only
    var sortable = Sortable.options(dropon.parentNode);
    if(sortable && !sortable.ghosting) return;

    if(!Sortable._marker) {
      Sortable._marker =
        ($('dropmarker') || Element.extend(document.createElement('DIV'))).
          hide().addClassName('dropmarker').setStyle({position:'absolute'});
      document.getElementsByTagName("body").item(0).appendChild(Sortable._marker);
    }
    var offsets = Position.cumulativeOffset(dropon);
    Sortable._marker.setStyle({left: offsets[0]+'px', top: offsets[1] + 'px'});

    if(position=='after')
      if(sortable.overlap == 'horizontal')
        Sortable._marker.setStyle({left: (offsets[0]+dropon.clientWidth) + 'px'});
      else
        Sortable._marker.setStyle({top: (offsets[1]+dropon.clientHeight) + 'px'});

    Sortable._marker.show();
  },

  _tree: function(element, options, parent) {
    var children = Sortable.findElements(element, options) || [];

    for (var i = 0; i < children.length; ++i) {
      var match = children[i].id.match(options.format);

      if (!match) continue;

      var child = {
        id: encodeURIComponent(match ? match[1] : null),
        element: element,
        parent: parent,
        children: [],
        position: parent.children.length,
        container: $(children[i]).down(options.treeTag)
      };

      /* Get the element containing the children and recurse over it */
      if (child.container)
        this._tree(child.container, options, child);

      parent.children.push (child);
    }

    return parent;
  },

  tree: function(element) {
    element = $(element);
    var sortableOptions = this.options(element);
    var options = Object.extend({
      tag: sortableOptions.tag,
      treeTag: sortableOptions.treeTag,
      only: sortableOptions.only,
      name: element.id,
      format: sortableOptions.format
    }, arguments[1] || { });

    var root = {
      id: null,
      parent: null,
      children: [],
      container: element,
      position: 0
    };

    return Sortable._tree(element, options, root);
  },

  /* Construct a [i] index for a particular node */
  _constructIndex: function(node) {
    var index = '';
    do {
      if (node.id) index = '[' + node.position + ']' + index;
    } while ((node = node.parent) != null);
    return index;
  },

  sequence: function(element) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[1] || { });

    return $(this.findElements(element, options) || []).map( function(item) {
      return item.id.match(options.format) ? item.id.match(options.format)[1] : '';
    });
  },

  setSequence: function(element, new_sequence) {
    element = $(element);
    var options = Object.extend(this.options(element), arguments[2] || { });

    var nodeMap = { };
    this.findElements(element, options).each( function(n) {
        if (n.id.match(options.format))
            nodeMap[n.id.match(options.format)[1]] = [n, n.parentNode];
        n.parentNode.removeChild(n);
    });

    new_sequence.each(function(ident) {
      var n = nodeMap[ident];
      if (n) {
        n[1].appendChild(n[0]);
        delete nodeMap[ident];
      }
    });
  },

  serialize: function(element) {
    element = $(element);
    var options = Object.extend(Sortable.options(element), arguments[1] || { });
    var name = encodeURIComponent(
      (arguments[1] && arguments[1].name) ? arguments[1].name : element.id);

    if (options.tree) {
      return Sortable.tree(element, arguments[1]).children.map( function (item) {
        return [name + Sortable._constructIndex(item) + "[id]=" +
                encodeURIComponent(item.id)].concat(item.children.map(arguments.callee));
      }).flatten().join('&');
    } else {
      return Sortable.sequence(element, arguments[1]).map( function(item) {
        return name + "[]=" + encodeURIComponent(item);
      }).join('&');
    }
  }
};

// Returns true if child is contained within element
Element.isParent = function(child, element) {
  if (!child.parentNode || child == element) return false;
  if (child.parentNode == element) return true;
  return Element.isParent(child.parentNode, element);
};

Element.findChildren = function(element, only, recursive, tagName) {
  if(!element.hasChildNodes()) return null;
  tagName = tagName.toUpperCase();
  if(only) only = [only].flatten();
  var elements = [];
  $A(element.childNodes).each( function(e) {
    if(e.tagName && e.tagName.toUpperCase()==tagName &&
      (!only || (Element.classNames(e).detect(function(v) { return only.include(v) }))))
        elements.push(e);
    if(recursive) {
      var grandchildren = Element.findChildren(e, only, recursive, tagName);
      if(grandchildren) elements.push(grandchildren);
    }
  });

  return (elements.length>0 ? elements.flatten() : []);
};

Element.offsetSize = function (element, type) {
  return element['offset' + ((type=='vertical' || type=='height') ? 'Height' : 'Width')];
};

function showCamera(cameraObj) {
    camera_id = cameraObj.attributes.fid;
    if(camera_display_mode == "quick") {
        var cur_camera = LIVE_CAMERAS[camera_id];
        Element.show("result-div");
        $("cam-img").src = "/cameras/images/"+ camera_id +".jpg";
        $("cam-name").innerHTML = cur_camera.label.toUpperCase();
        if(cur_camera.location != 'undefined' && cur_camera.location != null) {
            $("cam-locn").innerHTML = cur_camera.location.toUpperCase(); 
        } 
        else { 
            $("cam-locn").innerHTML = ""; 
        } 
    }
    else {
        request('/camera/show?id='+camera_id);
    }
}

function camera_not_found() {
    if(camera_auto_rotate) {
        autorotate_camera();	
    }
    else {
        $('cam-img').src = "/images/no-recent-image.jpg";
    }
}

function set_camera_meta_data() {   
    current_live_cam_info = LIVE_CAMERAS[camera_id];
    if( current_live_cam_info ) {
        cam_name = current_live_cam_info.label.toUpperCase();
        /* Add the video link next to the camera name only if the video is available for this location */
        if(current_live_cam_info.video_available) {
            cam_name += "&nbsp;<img src='/images/cam.gif' width='16px' height='8px' style='border:0;'>&nbsp;<a href='javascript:void(null);' onClick='javascript:stop_camera_auto_rotate();showVideo("+current_live_cam_info.id+");' style='font-size:8px;letter-spacing:0.1cm;'>VIDEO</a>";
        }
        if($('cam-name')) { $('cam-name').innerHTML = cam_name; }
        if($('cam-locn')) { 
            $('cam-locn').innerHTML = (current_live_cam_info.location == null)? " " : current_live_cam_info.location.toUpperCase(); 
            //highlightMarker(current_live_cam_info.lon, current_live_cam_info.lat, current_live_cam_info.label, "cameras");
        }
    }
}

function autorotate_camera() {
    if(camera_auto_rotate) {
        camera_id += 1;
        Element.show('live_cam_loading');
        current_live_cam_info = LIVE_CAMERAS[camera_id];
        if(current_live_cam_info == undefined) {
            camera_auto_rotate = false;
            camera_id = 1;
            $('cam-img').src = "/images/recycle-cameras.gif";
            $('cam-name').innerHTML = "CAMERA CYCLE COMPLETE ";
            $('cam-locn').innerHTML = "<a href='javascript:void(null);' onClick='javascript:start_camera_auto_rotate();autorotate_camera();'>SEE CAMERAS AGAIN</a>";
            return;
        }
        $('cam-img').src = "/cameras/images/" + camera_id + ".jpg?" + (new Date()).getTime();        
    }
}

function camera_on_load() {
    set_camera_meta_data();
    Element.hide("live_cam_loading");
    src = $("cam-img").src.substring($("cam-img").src.lastIndexOf("/")+1, $("cam-img").src.length);
    if($("video_links") && src != "no-recent-image.jpg") {
        $("video_links").show();
    }
}

function camera_on_error() {
    camera_not_found();
    Element.hide("live_cam_loading");
}

function refreshVideo() {
    if($("live-camera")) {
        Element.show('live_cam_loading');
        $('cam-img').src = "/cameras/videos/" + video_id + ".gif?" + (new Date()).getTime();
    }
}

function showVideo(loc_id) {
    Element.show('live_cam_loading');
    stop_camera_auto_rotate();
    video_id = loc_id;
    url = "/cameras/videos/" + video_id + ".gif";
    cam_name = current_live_cam_info.label.toUpperCase();
    cam_name += "<span id='video_links' style='display:none;'>&nbsp;<img src='/images/cam.gif' width='16px' height='8px' style='border:0;'>&nbsp;<a href='javascript:void(null);' style='font-size:8px;letter-spacing:0.1cm;'>VIDEO</a>";
    cam_name += "&nbsp;<a href='javascript:void(null);' onClick='javascript:playVideo();' style='font-size:8px;letter-spacing:0.1cm;'>PLAY</a>";
    cam_name += "&nbsp;<a href='javascript:void(null);' onClick='javascript:refreshVideo();' style='font-size:8px;letter-spacing:0.1cm;'>RELOAD</a></span>";
    $("cam-img").src = url;
    $("cam-name").innerHTML = cam_name;
}

function playVideo() {
    url = "/cameras/videos/" + video_id + ".gif";
    $("cam-img").src = url;
}


function refreshCamera() {
    if($("live-camera") && camera_id != undefined) {
        Element.show('live_cam_loading');
        $('cam-img').src = "/cameras/images/" + camera_id + ".jpg?" + (new Date()).getTime();
    }
}

function stop_camera_auto_rotate() {
    camera_auto_rotate = false;
}

function start_camera_auto_rotate() {
    camera_auto_rotate = true;
}

var camera_auto_rotate = true;
var camera_id;
var video_id;


function setMapCentre() {
    map_center = getMapCenter();
    $('lat').value = map_center.lat;
    $('lon').value = map_center.lon;
}

function closeInfo() {
    clearLayers(['markers']);
    Element.hide('popup');
}

function markMapID(e) {
    var loc = map.getLonLatFromViewPortPx(e.xy);
    var cur_layer = map.getLayersByName('markers').first();
    cur_layer.destroyFeatures();    
    var pgeom = new OpenLayers.Geometry.Point(loc.lon,loc.lat)
    var point = new OpenLayers.Feature.Vector(pgeom,{'icon' : 'marker.png'}, null);
    cur_layer.addFeatures(point);
    atoken = $('auth_token').value;
    if (popup != null) { map.removePopup(popup); popup = null; }    
    var content = "<span style='position:absolute;top:0px;right:0px;'><img src='/images/close.gif' onClick='closeInfo();' /></span><div id='response' style='padding:7px;border:5px solid #fbef65;height:150px;font-size:12px;background:#fff'><form action='/custom_map/create' onsubmit=\"new Ajax.Request('/custom_map/create', {asynchronous:true, evalScripts:true, parameters:Form.serialize(this)}); return false;\"><input type='hidden' name='authenticity_token' value=" + atoken + "><input type='hidden' name=custom_map[lat] value=" + loc.lat + "><input type='hidden' name=custom_map[lon] value=" + loc.lon + "><input type=hidden name=custom_map[zoom] value=" + map.getZoom() + "><span style='color:#000'>Enter a label</span><br/><input type='text' name='custom_map[label]' size='17'/><br/><span style='color:#000'>Notes/Details (optional)</span><br/><textarea name='custom_map[address]' rows=3 cols=20></textarea><br/><input type='submit' value='save' /><input type='button' value='cancel' onClick=\"Element.hide('popup');\" /></form></div>";
    popup = new OpenLayers.Popup("popup",
        new OpenLayers.LonLat(loc.lon,loc.lat),
        new OpenLayers.Size(570,510),
        content,
        false);
    popup.setSize(new OpenLayers.Size(210,160));
    popup.setOpacity(5.5);
    popup.setBackgroundColor('transparent');
    popup.setBorder('5px solid #4c4c4c');
    map.addPopup(popup);
}

function showCustomMap(result) {
    res = result.custom_map;
    render([{'icon' : 'move.gif', 'lon' : res.lon, 'lat' : res.lat}], {'centerMap' : true, 'layer' : 'mapid', 'zoom' : res.zoom});
    render([{'icon' : 'highlight.gif', 'lon' : res.lon, 'lat' : res.lat}], {'centerMap' : true, 'layer' : 'highlight', 'zoom' : res.zoom});
    map.raiseLayer(map.getLayersByName('mapid').first(),1);
    
    _text = "<DIV><IMG style='display:block;' src='/images/call_out.png'/></DIV><div style='padding:3px;font-family:Arial;font-weight:bold;background-color:#000;color:#FFF;font-size:10.5px;width:110px;'>";
    _text += "<div style='text-align:center;'>" + res.label + "</div>";
    if(res.address != null) {
        _text += "<hr/><div style='text-align:left;'>" + res.address + "</div>";
    }
    _text += "</div>";
    /*marker=new OpenLayers.Marker.Label(loc,icon,_text,options);
    custommaps.addMarker(marker);
    yellow_marker=new OpenLayers.Marker.Label(loc,flashing_yellow_icon,"", options);
    custommap_highlights.addMarker(yellow_marker);*/
}

var LOCATIONS_LIST = ["VIRGO NAGAR","VISHWANEDAM","DR AMBEDKAR STADIUM","HOCKEY STADIUM","KJ COLLEGE GROUND","PARADE GROUNDS","RAHEJA PARK","SAI PLAY GROUND","ST JOSEPHS GROUNDS","SULLIVAN POLICE GROUND","WAP STADIUM","BYTRAYANAPURA POLICE STATION","MUSEUM RD","RAJARAJESHWARINAGAR","HOSAKEREHALLI KERE","HULIMAVU KERE","KALKERE TANK","KODIGEHALLI KERE","MATHIKERE LAKE","MOUNT JOY TANK","RACHENAHALLI KERE","SANEGURUVANAHALLI TANK","SANKEY TANK","YELLAMALLAPPACHETTY KERE","BAGALAKUNTE","BOMMASANDRA","BYATRAYANAPURA","CHELUVADIPALYA","CHIKKA BANAVARA","DEEPANJALI NAGAR","DEVANAHALLI","DODDABOMMASANDRA","DODDAGUBBI","DODDAKALLASANDRA","DOORAVANINAGAR","DUBASIPALYA","GANDHI KRISHI VIGNANA KENDRA","GUDDADAHALLI","HEBBUGODI","JAGJEEVANRAM NAGAR","JALAHALLI EAST","JALAHALLI WEST","JEEVAN BHIMA NAGAR","JNANABHARATHI","KADUGODI","KANNAMANGALA","KEMPEGOWDA NAGAR","KODIGEHALLI","KONANAKUNTE","KORAMANGALA","KRISHNAIYYANAPALYA","MARUTHI SEVANAGAR","NAGARABHAVI","NAGASANDRA","PILLANNA GARDEN","RAJA RAJESHWARI NAGAR","RAJAJINAGAR INDUSTRIAL TOWN","RAJARAM MOHANROY EXTN","RAMMURTHY NAGAR","SARJAPUR","SHANTHALA NAGAR","SRIGANDADA KAVAL","THANISANDRA","THIPPASANDRA","VIMANAPURA","MARUTHINAGAR BUS STOP","MICHELPALYA","MINERVA","NETHAJI LAYOUT MATHIKERE","OLD PENSION MOHALLA","OM SHAKTI GANESHA","SWIMMING POOL EXTN","VYALIKAVAL","WEALERS COLONY","ACHUKUT","AECS COLONY","AGADUR COLONY","AGRAHARA","AGRAHARA MAGDI RD","AGRAHARA DASARAHALLI","AGRAHARA LAYOUT","AKKIPETE","AKSHAYANAGAR","ALLALASANDRA","AMARJYOTI LAYOUT","AMBEDKAR BHAVAN","ANAND NAGAR","ANANTHNAGAR CROSS","ANGSANA OASIS SPA AND RESORT","ANJANA NAGAR MAGADI RD","ANJANAPURA","ANJANEYANAGAR","BYYAPPANALLI","MITTAL TOWERS","TAJ WEST END HOTEL","TAJ RESIDENCY","ARMUGAM CIRCLE","BASHYAM PARK","D R SHAMANNA PARK","DEER PARK","GAYATHRI DEVI PARK","GENERAL IYAPPA PARK","JAWAHARLAL NEHRU PARK","JAYAMAHAL PARK","MAHATMA GANDHI PARK","JP NAGAR MINI FOREST","RESTHOUSE PARK","RICHARDS PARK","SAHAKARA NAGAR PARK","SILVER JUBLIEE PARK","SRI RAMAKRISHNA GARDEN","AGARA KERE","AGRAHARA DASARAHALLI TANK","ATTURU KERE","BEGUR KERE","BENAGANAHALLI TANK","VIMANANAGAR","VINAYAKA LAYOUT","VINOBANAGAR","VIRAT NAGAR","VISHVAPRIYA LAYOUT","VISVESHWARAIAH TECHNOLOGICAL MUSEUM","VISVESHWARAYA TOWER","VISVESVARAPURAM","VIVEKANAGAR","VIVEKANANDA COLLEGE","WHITE FIELD RD","WILSON GARDEN","WINDSOR MANOR HOTEL","WOCKHART HOSPITAL BANNERGHATTA RD","YAROB NAGAR","YEDIYUR LAKE","YELHANKA IV PHASE","YESHWANTHPUR INDUSTRIAL AREA","GOVINDSHETTYPALYA","AECS","NAL","GANDHIGRAMA MALLESHWARAM WEST","VIJAYANAGAR BUSSTAND","HAL III STAGE","BANGALORE DEVELOPMENT AUTHORITY","VV PURAM","RPC LAYOUT","INDIRANAGAR CLUB","ALI ASKAR RD","AREKERE","ATTIKUPPE","AZADNAGAR","BABU SAHEB PALYA","AVALHALLI","BALEPETE","BANASHANKARI II STAGE","BANASHANKARI V STAGE","BANAPPA PARK","BANSANKARI ORR","CIKKABANAVAR","DEVASANDRAMAIN RD","GURAPPANAPALYA","HEGADE NAGARA","KASAVANAHALLI","PADMANABHANAGAR","QUEENS RD","VIGNESWARANAGAR","MAHARANI AMMANI COLLEGE","CII MAGADI RAOD","MALLATHALLI","SINDHI COLONY","SIDDHESHWARANAGAR","SOMESHWARA NAGAR","SOMESHWARAPURA","SJ PARK","SP RD","SRI JAYACHAMARAJENDRA POLYTECHNIC","SRIRAMANAGARA","SRIRAMPURA","SRIRAMPURAM GROUND","SRI RAGHAVENDRA MATT CIRCLE","ST JOHNS HILL","ST JOHNS HOSPITAL","ST THERESA HOSPITAL","STOCK EXCHANGE TOWER","SUBBAIYAPALYA","SUBHASHNAGAR","SUBRAMANYANAGAR","SUBRAMANYAPURAM","SUDHINDRANAGAR","SUBBAHNA PALAYA","SUJTHA TALKIES","SUNKADAKATTE","SUMASANDRAPALYA","SWAMY NARAYAN MANDIR","TASKAR TOWN","TATA SILK FARM","THE COUNTRY CLUB","THAYAPPANAHALLI","TIGALARAPALYA","TIPUNAGAR","TIRUPATHI TIRUMALA DEVASTHANM OFFICE","UDAYANAGAR","UDUPI GARDEN BTM","ULSOOR MARKET","UNITY BUILDING","UPPARPETE","VAIYYALIKAVAL","VALLABHA TEMPLE","VARALAKSHMI NURSING HOME","VASAVI TEMPLE","VEERANNAPALYA","VEERASANDRA HOSUR RD","VB LAYOUT","VICTORIA HOSPITAL","VIDYANAGAR","VIDYARANYANAGAR","VIDYARANYAPURA POLICE STATION","VIJAYNAGAR CLUB","VIJINAPURA","PAPPI REDDY PALYA","PEENYA II STAGE","PARK HOTEL","PEENYA III PHASE","PEENYA POLICE STATION","PETNOOLPET","POLICE COMMISSIONERS OFFICE","POLICE OFFICERS CLUB","PRASANNA GANAPATHI","PRASHANTH NAGAR","PREM NAGAR","PERIYARNAGAR","RV COLLEGE","RAGHAVENDRA LAYOUT","RAGHUVANAHALLY","RAGIGUDDA","RAHAMATNAGAR","RAHEJA ARCADE","RAJAJI NAGAR I N BLK","RAJAJI NAGAR II BLK","RAJAJI NAGAR V BLK","RAJAJINAGAR I BLK","RAJAJINAGAR IV BLK","RAJAJINAGAR VI BLK","RAJENDRANAGAR","RAMACHANDRAPURA","RAMANJANEYA TEMPLE","RAMESH NAGAR","RANASINGPET","RANGA SHANKARA","RBI LAYOUT MAIN RD","RICHMOND TOWN","RMV EXTENSION","RMV II STAGE","RUKMININAGAR","SAHAKARANAGAR","PRIMROSE RD","SAIRANGA KALYANA MANTAPA","SANJEVANI OFFICE","SAMPIGE THEATRE","SESHADRIPURAM","SESHADRIPURAM COLLEGE","SBM LAYOUT MATHIKERE","SFS YELHANKA IV PHASE","SHANIMAHADEVA TEMPLE","SHANKAR NAGAR","SHANTHI PARK","SHAMANNA NAGAR","SHIVLING COLONY","SIDDAIAH RD","SHIVANAHALLI","MAHADEVAPURA","MAHALAKSHMIPURA","MAHARANI AMMANI COLLEGE","MALAGALA CIRCLE","MALLESHANNAPALYA","MANGAMMANAPALYA","MANARANPALYA","MANJUNATHANAGAR","MARAPPA GARDEN","MARENAHALLI","MARIYAPPANAPALYA","MATTADAHALLI","MARUTINAGAR","MEDAHALLI","MICO LAYOUT","MICO NAGANATHAPURA","MES GROUND","MOHANKUMARNAGAR","MOODALAPALYA","MRHB COLONY","MS BUILDING","MODI HOSPITAL","MUNESWARA BLK","MSR NAGAR","MUNNEKOLLAL","MUNISHWARANAGAR","MURGESH PALYA","MUNNESHWARA DEVASTHAN","NAGAVARA","NAGRATHPET","NAIDU LAYOUT","NANDHANAVANAM","NANDHINI LAYOUT","NANDINI TALKIES","NARASIMHAIANA PALYA MAGADI RD","NARAYANA NETHRALAYA","NATIONAL INSTITUTE OF UNANI MEDICINE","NATIONAL PUBLIC SCHOOL","NAYANDANAHALLI KERE","NEELADRI AMUSEMENT PARK","NEELASANDRA","NEHRUNAGAR","NEHRUPURAM","NAGARABHAVI CIRCLE","NGEF","NGEF LAYOUT NAGARBHAVI","NOVELL JUNCTION","NGEF LAYOUT","NTTF PEENYA INDUSTRIAL AREA","ORION HOSPITAL","PANCHAMUKI GANESHA TEMPLE","JOGUPALAYA","JP NAGAR VI PHASE","JP NAGAR VII PHASE","JUDICIAL COLONY","JUDICIAL LAYOUT","KABIR ASHRAMAM","KADABISNAHALLI","KADARENAHALLI","KADUGONDANAHALLI","KAMAKSHIPALYA","KAMALANAGAR","KAMMANAHALLI","KANAKANAGAR","KANTEERVA INDOOR STADIUM","KARNATAKA HOCKEY STADIUM","KASTHURINAGAR LAYOUT MAGADI RD","KAUDENAHALLI","KEMPAGOUDANAGAR DASARAHALLI","KENCHENHALLI","KENDRIYA SADAN","KAVERINAGAR","KHB GAMES VILLAGE","KHODAYS BREWERIES","KIKONDRAHALLI","KODICHIKKANAHALLI","KODIPURA","KMN III BLK","KORAMANGALA 80 FT RD","KORAMANGALA II BLK","KORAMANGALA INDOOR STADIUM","KORAMANGALA POLICE STATION","KORAMANGALA VI BLK","KORAMANGALA VII BLK","KORAMANGALA VIII BLK","KR PURAM","KR PURAM BUS STAND","KR PURAM FLY OVER","KR PURAM RLY STATION","KR PURAM SUBREGISTER OFFICE","KRISHNARAO PARK","KRISHNANAGAR","KUKREJA","KUVEMPUNAGAR","LAKKASANDRA","LAKSHMANANAGAR","LANGFORD RD","LAKSHMIPURAM","MADIVALA MARKET","MADIWALA KSRP GROUND","LOWER PALACE ORCHARDS","GRINDWELL NORTON WHITEFIELD","GRUHALAKSHMI LAYOUT","HAL LAYOUT","HAL MARKET","HANDRIHALLI MAIN RD","HARINAGAR","HARISHCHANDRA GHAT","HEBBAGODI","HEBBAL KEMPAPURA","HEGGANAHALLI","HEGGANAHALLI CROSS","HENNUR BANDE","HMT LAYOUT","HOSAHALLI VIJAYANAGAR","HOSMAT HOSPITAL","HOYSALANAGAR","HSR CLUB","HUDSON CHURCH","IBBULUR","IISC LAYOUT KODIGEHALLI","ILYASNAGAR","INDIRANAGAR 2ND STAGE","INDRANAGAR ESI","INDRANAGAR DEFENCE COLONY","ISRO LAYOUT","ITI LAYOUT MYSORE RD","ITTAMADU","JAIN TEMPLE DASARAHALLI","JAKKASANDRA","JAKKASANDRA SARJAPUR RD","JAKKUR AIRFIELD","JANATHA HOTEL","JARAGANAHALLI","JAYA BHARATHI NAGAR","JAYANAGAR","JAYANAGAR III BLK","JAYANAGAR IV T BLK","JAYANAGAR COMPLEX","JAYANAGAR EXCHANGE AREA","JAYANAGAR GENERAL HOSPITAL","JAYANAGAR I BLK","JAYANAGAR II BLK","JAYANAGAR IX BLK","JAYANAGAR VI BLK","JAYANAGAR VII BLK","JAYANAGAR VIII BLK","JC NAGAR","JC NAGAR NANDINI LAYOUT","JEEVANAHALLI COX TOWN","JINDAL","BUPASANDRA","BUTTRAHALLI","BVK IYENGAR RD","BYADARAHALLI MAGADI RD","BYATRAYANAPURA MYS RD","BYADARAHALLI","CAMBRIDGE LAYOUT","CARIAPPA MEMORIAL PARK","CENTRAL JAIL NAGANATHAPURA","CENTRAL POWER RESEARCH INSTITUTE (CPRI)","CHALAGATTA","CHARLES CAMBEL RD","CHIKBEGUR","CHIKKAKALASANDRA","CHIKMADIVALA","CHINNASAMY CRICKET STADIUM","CHITRA KALA PARISHAT","CHOKKASANDRA PEENYA INDUSTRIAL AREA","CHOLANAYAKANAHALLI","CHOWDIAIH MEMORIAL HALL","CKC GARDEN","CLEVELAND TOWN","COFFEE BOARD MARIYANNAPALYA","COTTONPET","COX TOWN","CUBBON PARK POLICE STATION","CUBBONPET","DASARAHALLI MAGADI RD","DASARAHALLI TUMKUR RD","DEVARA JEEVANAHALLI","DEVASANDRA","DEVEGOWDA PETROL BUNK","DICKENSON RD","DINNURU","DODDA BOMMASANDRA","DODDABANASWADI","TUMKUR RD 8TH MILE","DODDENEKKUNDI INDUSTRIAL AREA","DOLLARS COLONY","DOOPANAHALLI","ESI HOSPITAL","FREEDOM FIGHTER NAGAR","GANDHI MARKET","GAUDANPALYA","GHAREBAVIPALYA","GIRINAGAR AVALAHALLI","GOLLARAHATTI","GORAGUNTEPALYA","GOVERNMENT COLLEGE OF PHARMACY","GOVERNMENT INDUSTRIAL TRAINING INSTITUTE","BANGALORE BAPTIST HOSPITAL","BANGALORE HOSPITAL","ANJENEJA SWAMY TEMPLE","ANNAPURNESWARINAGAR","ARAB LINES","ARANYA BHAVAN MALLESWARAM","AREKEMPANAHALLI JAYANAGAR","AREKERE BANNERGATTA RD","ASHOKAPURAM","ASHOKNAGAR","AYYAPPA GARDEN","AYYAPPANAGAR CIRCLE DEVASANDRA RD","B NARAYANAPURA","BADAMI HOUSE","BAL BHAVAN","BALAJI LAYOUT","BALAJI NAGAR","BANGALORE CLUB","BANGALORE UNIVERSITY CAMPUS","BASAPPA CIRCLE","BASAVANAGAR","BASAVABHAVAN","BASAVANAGAR BUS STAND","BASAVAPURA MAIN RD","BASAVASAMITHY LAYOUT","BB RD YELHANKA","BASAVESWARANAGAR","BDA COMPLEX BSK II STAGE","BEEF MARKET SHIVAJINAGAR","BEERESWARA NAGAR","BENDRE NAGAR","BETTAHALSURU","BHASHYAM CIRCLE SADASHIVNAGAR","BHEL","BHOOPASANDRA","NANDINI LAYOUT","BHUVANESWARA LAYOUT OLD MADRAS RD","BHEL LAYOUT","BHUVANESWARINAGAR HESARGHATTA MAIN RD","BINNAMANGALA II STAGE","BILEKAHALLI","BINNYSTONE GARDEN","BIOCON CAMPUS HOSUR RD","BMK LAYOUT","BMTC DEPOT PUTTENAHALLI","BMTC INDIRA NAGAR","BOMMANAHALLI","BOMMANAHALLI ST.MARYS CHURCH","BRAIND SQUARE","BUGLE ROCK","MALLYA HOSPITAL","MINERVA MILLS","MINSK SQUARE","MISSION RD","MM RD","MS RAMAIAH HOSPITAL","MOUNT CARMEL COLLEGE","MYSORE CIRCLE","MYSORE SOAP FACTORY","NAGAPPA BLK","NGR LAYOUT BOMMANAHALLI","NR COLONY","PRAKASHNAGAR","PUBLIC UTILITY BULDING","PUSHPANJALI THEATRE","PUTTENHALLI LAKE","BELLARY RD RAILWAY CROSSING","RAJAGOPALA NAGAR","RAJAJINAGAR III BLK","RMV LAYOUT","SANJIVINI NAGAR","SANKEY RD","SHASTRINAGAR","STATE BANK OF INDIA","SULTANPALYA","TILAKNAGAR","TRINITY CIRCLE","ULSOOR BUS STOP","ULSOOR LAKE","UNIVERSITY OF AGRICULTURAL SCIENCE","UTTARAHALLI","VANNARPET","VARTHUR LAKE","VETERINARY COLLEGE","VETERNARY HOSPITAL","RICHMOND CIRCLE","ASTRA ZENECA NEAR YELHANKA","CIRCLE MARAMMA TEMPLE","RICHMOND RD JN","SATELITE BUS STATION","SHESHADRIPURAM","SRI RAMANJUNEYA RD","TANKBUND RD UPPARPET","THAVARKERE","YELAHANKA NEW TOWN BUS STATION","YESUKRUPALAYA CHURCH","CHANDAPURA","ABHINAYA THEATRE","AGARA","BAIRASANDRA","BANASHANKARI III STAGE","SRI ADICHUNCHANAGIRI KALYANA MANDIR","SRINIVAS TEMPLE","THE ATRIA HOTEL","UMA THEATRE","VEERA ANJANEYA","VARTUR","AIR FORCE SCHOOL","ANDHRAHALLI MAIN RD","GM PALYA","VIVEKANAGAR CHURCH","CUNNINGHAM ROAD","MADHAVANAGAR","BHARATH NAGAR","CHIEF METROPOLITAN MAGISTRATE COURT","GANGANAGAR BUS STOP","GAURAV NAGAR","GEDDALAHALLI","GAYATRI NAGAR","JAI BHEEMA NAGAR","KALYAN NAGAR","KANTIRAVA NAGAR","KASTURBA NAGAR","KASTURBA RD","KATHREGUPPE","KEMPAGOWDA NAGAR","KEMPAPURA","KEMPAPURA AGRAHARA","KHANIJA BHAVAN","KHB COLONY","K NARAYANAPURA","KONANAKUNTE CROSS KANAKAPURA RD","KONAPPANA AGRAHARA","KORAMANGALA I BLK","KP AGRAHARA","KR PURAM POLICE STATION","KSFC LAYOUT LINGARAJAPURAM","KUDLU","LAGGERE","LAKSHMINAGAR","LARSEN AND TOUBRO","LAVAKUSHA NAGAR","LEELA PALACE","LEPROSY HOSPITAL","LINGARAJAPURAM","LN PURAM","MACIVER TOWN","MAHA GANPATHI TEMPLE","MAHALAKSHMI LAYOUT","MALLAPPA LAYOUT","MALLESHWARAM WEST","MALLESHWARAM GROUNDS","VIBHATIPURA","AGS LAYOUT","A NARAYANAPURA","ADARSH GARDENS","ADARSHA THEATRE","ADUGODI","AGRAM","AIR FORCE HEAD QUARTERS TRAINING COMMAND","AIRPORT RD","AIRPORT","AM STREET","AMSTRONG RD","ANIL KUMBLE CIRCLE","APMC YARD","ARABIC COLLEGE NAGAWARA","ANANDA RAO CIRCLE","AREKERE GATE BUS STOP","ASHOKA PILLAR","ARUMUGAM MUDALIAR RD","AUSTIN TOWN","AVENUE RD","BAGUR","BAMBOO BAZAR","BANASHANKARI","BANASHANKARI I STAGE","BANASHANKARI BUS STOP","BANASWADI","BANGALORE CENTRAL","BANGALORE DAIRY","MADARAS ENGINEERIG GROUP MILITARY AREA","BANDAPPA GARDEN GOKUL","BANGALORE EAST RLY STN","BANGALORE GOLF CLUB","BANGALORE UNIVERSITY","DOMLUR","AECS LAYOUT D BLK WHITEFIELD","BANASAWADI RM NAGAR","BANK COLONY BUS STOP","BHEL FACTORY","BHEL MINI COLONY","BRINDAVANANAGAR","ASHOK NAGAR BSK 1ST STAGE","CHAMUNDINAGAR RTNAGAR","BRITISH LIBRARY","KENNA METAL WIDIA TUMKUR RD","MURUGESAPALYA","VIRANPALYA","SANGEETA LODGE","SHIKSHKA SADANA","WIND TUNNEL RD","YALLACHENAHALLI","YAMLUR","YEDIYUR","YELAHANKA","YELAHANKA POLICE STATION","YELAHANKA RAILWAY JUNCTION","YELANKA NEW TOWN","YESHWANTHAPURA RAILWAY STATION","YESHWANTHPUR MARKET","YESHWANTHPURA","YESHWANTPHURA CIRCLE","TANK RD ULSOOR","VIJAYANAGARA BMTC DEPO","LANGFORD TOWN","BINNAMANGALA","PATTANAGERE","PUTTENAHALLI","HAL II STAGE","CHOKKASANDRA","INDIAN INSTITUTE OF MANGEMENT (IIM)","JCROAD","INDIRANAGAR 100FT ROAD","AMCO FACTORY","ARRIVALS GATE AIRPORT RD","BASAVESWRANAGAR 8TH MAIN","CHANDRA LAYOUT BUS STATION","DATTATREYA TEMPLE AREA","GANDHINAGAR","GURUDWARA","GUTTAHALLI","ITI FACTORY","KP AGRAHARA 6TH CROSS","MAGADI RD JUNCTION","MEG CENTER","NANDA THEATRE SOUTHEND RD","OUTER RING RD","RAMAMURTINAGAR","SG PALYA","SUMANGALI SEVASHRAMA","THE BIG KIDS KEMP","SUBRAMANYA NAGAR POLICE STATION","THIPPASANDRA HAL 3RD STAGE","THRIVENI RD","WHEEL AND AXLE FACTORY","YELAHANKA TILES FACTORY","SRINAGAR","RV RD","BENSON TOWN","ST MARTHAS HOSPITAL","ST MARKS RD","STATE BANK OF MYSORE","SUBASH CHANDRA BOSE CIRCLE","SUDHAMA NAGAR","SULTANPETE","SUNKADA KATE CIRCLE","SURABHINAGAR","TAGORE CIRCLE","T DASARAHALLI","TANISANDRA MAIN RD","TANNERY RD","TAVAREKERE","TEACHERS COLONY","TELECOM LAYOUT","THE HINDU","THIMMAYYA REDDY LAYOUT","THYAGARAJANAGAR","THINDLU","TILAK NAGAR MAIN RD","TIMBER YARD LAYOUT","TIN FACTORY","TIPPASANDRA","TOWN HALL","TRIBHUVAN CIRCLE","TOLL GATE CIRCLE MAGADI RD","TRINITY CHURCH","TUMKUR RD","ULSOOR POLICE STN","URVASHI THEATRE","VALMIKINAGAR","VANI VILLAS HOSPITAL","VARTHUR RD","VASANTHANAGAR 8TH MAIN","VASANTNAGAR","VICTORIA LAYOUT","VICTORIA RD","VIDHANA SOUDHA","VIDYARANYAPURA","VIGNANNAGAR","VIJAYA COLLEGE","VIJAYANAGARA","VIKASA SOUDHA","VIRABHADRANAGAR","VIVEKANANDANAGAR","VN RD","WELLINGTON STREET","WEST OF CHORD RD","WHEELERS RD","WHITE FIELD","WHITE FIELD RW STATION","RAMAMURTHY NAGAR","RAMKRISHNA ASHRAMA CIRCLE","RAVINDRA KALAKSHETRA","RBANMS GROUNDS","RESIDENCY RD","RICHARDS TOWN","RICHMOND CIRCLE FLYOVER","RICHMOND RD","RESERVE BANK OF INDIA","RK HEGDE NAGAR","RT NAGAR 80FT RD","RT NAGAR","RR NAGAR","SADASHIVNAGAR","SADDUGUNTEPALYA","SAFINA PLAZA","SAGAR APOLLO HOSPITAL","SAGAR THEATRE","SAGAYAPURAM","RUSTUMBAGH","SAIBABA HOSPITAL","SAJJAN RAO CIRCLE","SAMPANGIRAMNAGAR","SAMPIGE RD","SANGAM CIRCLE","SANJAYNAGAR","SANKAR MATT CIRCLE","SANKARAPURAM","SARJAPUR IBLUR","SARJAPUR RD","SEPPINGS RD","SHANKARA MATT","SHANTINAGAR","SHEKAR NETRALAYA","SHIVAJI RD","SHIVAJINAGAR BUSSTAND","SHIVAJINAGAR","SHIVANANDA CIRCLE","SIDDALINGAIAH CIRCLE","SILK BOARD","SILK BOARD FLYOVER","SINGASANDRA","SIRSI CIRCLE","SITA CIRCLE","SIVAN CHETTY GARDENS","SJP RD","SOUTH END CIRCLE","SRI BALAJI THEATRE","SOUTH END RD","SRINIVASANAGAR","ST JOHNS RD","NATIONAL GAMES HOUSING COMPLEX","NATIONAL TUBERCULOSIS INSTITUTE","NAVARANG CIRCLE","NAYANANDANAHALLI","NDDB","NEELASANDRA MAIN RD","NEHERU PLANTARIUM","NELAGADHARANAHALLI","NEW GUDDADAHALLI","NEW THARUGUPET","NEW THIPPASANDRA","NILGIRIS WHITEFIELD","NIMHANS","OBEROI HOTEL","OLD GUDDAHALLI","NS PALYA","OLD MADRAS RD","OPH RD SHIVAJI NAGAR","OMBR LAYOUT","PADARAYANAPURA","PALACE CROSS RD","PALACE GROUNDS","OKALIPURA","PALACE ORCHARDS","PALACE GUTTAHALLI","PALACE RD","PALLAVI THEATRE","PARSI TEMPLE","PEENYA","PEENYA CIRCLE","PEENYA I STAGE","PEENYA INDUSTRIAL AREA","PES ENGG COL RING RD","POLICE HQ","POLICE OFFICERS GROUND","POORNIMA THEATRE","POTTERY TOWN","PRASANNA THEATRE","PROF SIVA SANKAR CIRCLE.","PUBLIC LIBRARY","PROMENADE RD","RV COLLEGE OF ENGG","RV SCHOOL","RACE COURSE","RAGHAVENDRA SWAMY MUTT","RAJ BHAVAN","RAJARAJESHWARI NAGAR ARCH","RAJIV GANDHI CIRCLE","RAJIVGANDHINAGAR","RAJMAHAL VILAS EXTN","MALATHALLI","MALLESHWARAM","MALLESHWARAM 11TH CROSS","MALLESHWARAM 8TH MAIN NEAR MES COLLEGE","MALLESHWARAM CIRCLE","MALLESHWARAM RAILWAY STATION","MALLESHWARAM POLICE STATION","MALLIGE NURSING HOME","MALLYA JUNCTION","MANEKSHAW PARADE GROUND","MANIPAL CENTRE","MANIPAL HOSPITAL","MARATHAHALLI","MARATHALLI ORR RING RD","MARATHHALLI RAIL BRIDGE","MARBLE MARKET BANNERGATTA RD","MARGOSA RD","MARKHAM RD","MARATHAHALLI MAIN RD","MARUTHI HBS LAYOUT","MASJID RD","MATHIKERE","MAYO HALL","MEENAKSHI TEMPLE","MEI POLYTECHNIC","MEKHRI CIRCLE","METRO KANAKAPURA RD","METRO YESHWANTPUR","MILLERS RD","MINERVA CIRCLE","MS PALYA","MS RAMAIAH COLLEGE","MS RAMAIAH RD","MS RAMAIAH KALYANAMANTAPA","MTR","MUNIREDDYPALYA","MUNNESHWARA BLK","MURPHY RD","MURPHY TOWN","MYSORE RD FLYOVER","MYSORE RD RING RD JUNCTION","NAGAPURA MAIN RD","NAGARVARA MAIN RD","NAGASHETTIHALLI","NAJAPPA CIRCLE","NANDA THEATRE","NANDIDURG","NARAYANA HRUDAYALA","NATARAJ THEATRE","KIDWAI INSTITUTE OF ONCOLOGY","KILLARI RD","KMF MOTHER DAIRY","KK HALLI","KODIGEHALLI GATE BELLARY RD","KODIHALLI","KOHINOOR FIELD","KOMMAGHATTA RD","KONEN AGRAHARA","KORAMANGALA DEPOT","KORAMANGALA III BLK","KORAMANGALA CLUB","KORAMANGALA IRR","KORAMANGALA WATER TANK","KORAMANGALA V BLK","KR GARDEN","KR PURAM BRIDGE","KR CIRCLE","KR PURAM LAKE","KENGERI","KRUMBIGAL RD","KSRTC BUSTAND","KSRTC OFFICE","KUDLU GATE HOSUR RD","KUDLU VILLAGE","KUDTHI GATE","KUMARA PARK","KUGULLU CROSS YELHANKA","KUMARAPARK WEST","KUMARASWAMY LAYOUT","KUNDANAHALLI MN RD","KUNDENAHALLI GATE","KURUBARAHALLI","KUVEMPU CIRCLE","KUMARA SWMY LAYOUT II STAGE","LAL BAGH WEST GATE","LAVELLE RD","LB SHASTRY NAGAR","LE MERIDIAN","LIDO THEATRE","LIC COLONY","LOTTEGOLLAHALLI","SOUTH CITY AREKERE","MADHAVAN PARK","MADIVALA LAKE","MADIWALA","MAGADI RD","MADIWALA POLICE STATION","MAHARANI COLLEGE FOR WOMEN","MAJESTIC","MAJESTIC CIRCLE","ITPL","JAGAJIVANARAM NAGAR POLICE STATION","JAIL JUNCTION","JAKKUR","JAL BHAVAN","JALAHALLI","JALAHALLI CROSS","JAYADEVA HOSPITAL","JAYAMAHAL","JAYAMAHAL RD","JAYANAGAR SOUTH END","JAYANAGAR V BLK","JIGNI LINK RD","JINDAL ALUMINUM FACTORY","JIVANBIMANAGAR","JOHNSON MARKET","JP NAGAR","JP NAGAR 24TH MAIN","JP NAGAR I PHASE","JP NAGAR III PHASE","JP NAGAR MINI FOREST","JP NAGAR V PHASE","KACHARAKANAHALLI","KADERENAHALLI CROSS","KAGGADASAPURA","KALASIPALYA","KAMAKYA JUNCTION","KAMARAJ RD","KAMMAGONDANAHALLI","KAMMANAHALLI MAIN RD","KANAKAPURA RD","KANNADA BHAVAN","KARNATAKA GOLF ASSOCIATION","KARNATAKA HIGH COURT","KASTURINAGAR","KATTRIGUPPA MAIN RD","KAVAL BYRASANDRA","KAVERIPURA","KC GENERAL HOSPITAL","KEMP FORT","KEMPAMBUDHI LAKE","KEMPEGOWDA CIRCLE","KENGERI BMTC STOP","KENGERI POLICE STATION","KENGERI RAILWAY STATION","KENGERI SATELLITE TOWN","KENGERI SUBREGISTRAR OFFICE","DOUBLE ROAD","KHB BMTC BUS STOP","KHODAY JUNCTION","GANGOTRI CIRCLE","GARDEN CITY COLLEGE","GAVIPURAM","GELEYARA BALAGA NANDINI LAYOUT","GEM PLAZA","GENERAL POST OFFICE","GHOUSIA COLLEGE OF ENGINEERING","GIRINAGAR","GIRINAGAR 2ND PHASE","GOLDEN LANDMARK HOTEL","GOLFVIEW CAMPUS","GOTTIGERE","GOVINDPURA MAIN RD","GOVINDRAJNAGAR","GRAND ASHOKA HOTEL","GRAPHITE INDIA","GUPTA LAYOUT","GUTTAHALLI CIRCLE","HAL HELICOPTER DIVISION","HANUMANTANAGAR","HAVANURU CIRCLE","HBR LAYOUT","HEBBAL","HEBBAL FLYOVER","HEBBAL LAKE","HEROHALLI BUS STOP","HESARAGHATTA MAIN RD","HIGH GROUNDS","HMT SHARADAMBA NAGAR","HOLIDAY INN HOTEL","HONGASANDRA","HOODY CIRCLE","HORUMAVU","HOSKEREHALLI","HOTEL EMPIRE INFANTRY RD","HRBR LAYOUT III BLK","HSR LAYOUT","HUDSON CIRCLE","HULIMAVU","IDEAL HOMES TOWNSHIP","INDIA GARAGE","INDIAN EXPRESS","INDIRANAGAR","INFANTRY RD","INFOSYS ELECTRONIC CITY","INNER RING RD DOMLUR","INNER RING RD EJIPURA","INSTITUTE OF ENGINEERS","ISKCON","ITI BUS STOP","ITI CIRCLE","CONTONMENT RLY STN","CORPORATION CIRCLE","COOKE TOWN","CUBBON PARK","CSI COMPOUND JC RD","CUNNIGHAM RD","DAIRY CIRCLE","DAIRY CIRCLE FLYOVER","CV RAMAN NAGAR","DAVIS RD","DAYANAND SAGAR EDUCATIONAL INSTITUTIONS","DAYANANDA SAGAR COLLEGE BUS STOP","DECCAN HERALD","DEFENSE COLONY","DELL IRR","DEVAIAH PARK","DEVARACHIKKANAHALLI","DEVATHACHAR RD","DIAMOND DISTRICT","DIPANJALINAGAR","DHARAMARAYA SWAMY TEMPLE","DISPENSARY RD","DIVYASRI","DODDENEKKUNDI","DODDA GANESHANA GUDI","DODDENEKKUNDI VILLAGE","DODDKALASANDRA","DOLLAR LAYOUT J P NAGAR","DODPETE","DOMLUR II STAGE","DOORDARSHAN KENDRA","DOUBLE RD","DR. RAJKUMAR RD","DVG RD","EAST END CIRCLE","EJIPURA","EJIPURA CROSS","EJIPURA MAIN RD","ELECTRONICS CITY","EPIP IND AREA","ELECTRONICS CITY BUS DEPOT","FAMILY MART","FORUM","FRAZER TOWN","FUN WORLD","GANDHI BAZAAR","GANDHI NAGAR","GANDHI NAGAR JAIL","GANGAMMA THIMMAIAH HALL","GANGANAGAR MARKET","GANGAPPA GARDEN","BRIGADE RD","BRINDAVAN NAGAR","BROOKE FIELD","BRUNTON RD","BSF YELAHANKA","BSNL TELEPHONE EXCHANGE ULSOOR","BINNYPETE","BTM BUS STOP","BTM FLYOVER","BTM I STAGE","BTM II STAGE","BTM LAYOUT","BULL TEMPLE RD","BULL TEMPLE","BYATRAYANAPURA BELLARY RD","BYRASANDRA","CANARA BANK HEAD OFFICE","CAUVERY BHAVAN","CASTLE STREET","CAUVERY EMPORIUM","CAUVERY THEATRE","CENTRAL RESERVE POLICE FORCE ( CRPF)","CHAMARAJAPET","CHALUKYA HOTEL","CHAMARAJPET CIRCLE","CHANDRA LAYOUT","CHANNAMMANAKERE","CHANNASANDRA","CHIK BANASAWADI","CHIKPETE","CHIKKASANDRA HESARGATTA RD","CHINNAPANA HALLI","CHOLUR PALAYA","CHINNAPPA GARDEN","CHOLURPALYA MAGADI RD","CHORD RD JUNCTION","CHRIST COLLEGE","CHURCH STREET","CITY ARMED RESERVED POLICE HQ","CITY MARKET","CITY CIVIL COURT COMPLEX","CITY RAILWAY STATION","CMH RD","COFFEE BOARD","COLES PARK","COLES RD","COMMAND HOSPITAL","COMMERICIAL STREET","COMMAND HOSPITAL RD","CONVENT RD","BAGINI PALACE","TULASI CINEMA THEATRE","GREEN MEDOWS","WIPRO SARJAPUR ROAD","CENTRAL SILK BOARD","HINDUSTAN AERONAUTICAL LTD","YELLAMMA DASAPPA INSTITUTE OF TECHNOLOGY","RADHA KRISHNA KALYANA MANTAPA","BRIGADE MILLENIUM APARTMENTS","APOLLO HOSPITAL","KALYANI KALA MANDIRA","VELANKANI","NARASIMA CINEMA THEATER","BOSCH","VENKATESHWARA CINEMA THEATRE","BIOCON LTD","HOTEL BALAJI INTERNATIONAL","BARTON CENTRE","GARUDA MALL","PRESTIGE MERIDIAN","LALITA KALA ACADEMY","DR AMBEDKAR BHAVAN","ULSOOR","HAL VIMANAPURA","ITI","BANGALORE MEDICAL COLLEGE","BANGALORE PALACE","BANNERGHATTA RD","BANSAWADI MAIN RAOD","BAPUJI NAGAR","BARTHIYA VIDYA BHAVAN","BASAVESHWARA CIRCLE","BASAVANAGUDI","BDA CIRCLE","BDA COMPLEX INDIRA NAGAR","BEGUR","BELLANDUR","BELLANDUR LAKE","BELLARY RD","BEML","BEML CIRCLE","BESCOM","BHARTI BT","BIG BAZAR BSK III STAGE","BISHOP COTTON BOYS SCHOOL","BISHOP COTTON GIRLS SCHOOL","BMS COLLEGE OF ENGINEERING","BMSIT YELAHANKA","BOWRING HOSPITAL","KORAMANGALA BDA COMPLEX","BANGALORE CITY RAILWAY STATION","KEMPEGOWDA BUS STATION","KMF","DHARMARAJ COLLEGE","FOOT BALL STADIUM","LIFESTYLE","SAI HOCKEY STADIUM","LEELA PALACE","ST JOHN MEDICAL COLLEGE AND HOSPITAL","RAMAKRISHNA ASHRAMA","SREE KALIKA PARAMESHWARI TEMPLE","WIPRO TUMKUR ROAD","AIR FORCE STATION","INDIAN BUREAU OF MINES","JAWAHARLAL NEHRU SCIENTIFIC RESEARCH CENTRE","BANGALORE INTERNATIONAL SCHOOL","KANTEERAVA THEATRE","SRI KANTEERAVA STUDIOS LTD","PANACEA HOSPITAL","CHITRA KUT MAHAL","CITY CENTRAL LIBRARY","MAHAVEERA JAIN TEMPLE","ADA RANGA MANDIRA","KEMPFORT","ALL INDIA ROAD","ABB LIMITED","DODDIS RESORT","PRESTIGE MONTE CARLO RESORT","ANJANI CINEMA THEATRE","AMMAJI KALYANA MANTAPA","BHARATHI FILM THEATRE","DODDAMMA DEVI TEMPLE","MALLIGE HOSPITAL","ASHRAYA HOSPITAL","SHOBA SUNFLOWER APARTMENTS","HINDUSTAN LEVER LIMITED","ICHTHUS CHURCH","SATHYA SAI BABA HOSPITAL","CATHOLIC LOURDES CHURCH","SAPTHAPADI CONVENTION HALL","BUDDA HOSPITAL","DR AMBEDKAR INSTITUTE OF TECHNOLOGY","SPORTS AUTHORITY OF INDIA","THE CLUB","RAJA RAJESHWARI TEMPLE","MANIPAL SPECIALITY HOSPITAL RAJARAJESHWARI NAGAR","SHOBA RENAISSANCE","BASHYAM CIRCLE","KOTHNUR","SARAKKI","ITC","SURVEY OF INDIA","PASSPORT OFFICE","CRICKET STADIUM","RELIANCE INFOCOM","RAGHAVENDRA HOSPITAL","WIPRO SYSTEMS SILK BOARD","VASUDHA BHAVAN","MARUTHI MANDIR","NAVARANG THEATRE","RAMANA MAHARSHI PARK","DODDA ANJENAYA TEMPLE","INFANT JESUS CHURCH","GALI ANJENAYA TEMPLE","BANASHANKARI TEMPLE","VISHWESHVARIAH MUSEUM","MG ROAD","SHIVA TEMPLE","TIPPUS PALACE","PLANETARIUM","LIFE INSURANCE CORPORATION","KR MARKET","KARNATAKA GOLF CLUB","INDIAN INSTITUTE OF SCIENCE","MALLAPPA HOSPITAL","PRAMOD THEATRE","RAJAJINAGAR","LALBAGH","BHEL ELECTRONICS CITY","Bangalore International Airport"];


var BUS_ROUTES_LIST = ["1","100","1000","10001","100-E","104","105-A","107","107-C","107-D","108","108-B","10-A","11","110","111","111-A","111-C","111-D","111-E","112","112-A","112-E","113","113-E","114","114-A","114-C","114-E","115","115-A","119","119-A","119-B","119-C","12","121-A","122","123","124","125-A","125-E","126","126-A","127","128","129","129-C","12-A","12-B","12-C","12-D","12-E","13","130","130-E","131","131-D","131-E","131-F","132","132-B","133-E","136","136-A","137","137-A","138","138-A","138-E","139","13-A","13-B","13-C","13-D","13-E","13-F","13-G","13-H","13-J","13-K","14","140","140-A","140-B","140-D","140-E","141","141-A","141-B","141-D","141-E","141-K","143","143-A","143-E","144","144-A","144-B","144-E","144-G","144-H","144-K","145","145-A","146","146-A","146-B","146-E","147","14-A","14-B","15","150","152","154","155","15-A","15-C","15E","15-E","15-F","15-G","15-H","15-K","15-L","16","161-B","161-C","161-D","161-F","162","162-A","162-D","162-E","163","163-A","163-B","163-C","164","165-B","165-E","166","168-A","168-D","168-E","168-F","169","170","171","171-B","171-C","171-D","171-E","171-F","171-G","171-H","173","173-A","174","174-A","175","176","176-A","176-C","176-D","176-E","177","177-D","178","18","180","181","182","183","183-A","184","185","185-A","186","187","188","188-A","188-B","190","192","194","195","195-A","196","197","19-E","1-A","1-E","1-F","2","20","200","200-D","201","201-B","201-C","201-D","201-DA","201-F","201-G","201-H","201-J","201-K","201-L","201-M","201-N","201-Q","201-R","201-RC","201-S","201-U","201-V","202","202-A","202-D","202-E","203","205","205-A","205-B","205-C","205-D","205-E","206","206-A","207","207-A","21","210","210-A","210-B","210-C","210-CA","210-D","210-E","210-EA","210-F","210-G","210-H","210-HA","210-I","210-J","210-K","210-KA","210-KB","210-L","210-M","210-N","210-NA","210-NB","210-P","210-Q","210-R","210-T","210-U","210-V","210-W","210-X","210-Y","210-Z","210-ZA","211","211-A","211-B","211-C","211-D","211-E","211-F","211-G","211-H","211-J","211-K","211-L","211-N","211-P","211-Q","211-R","212","212-B","212-C","212-F","213","213-A","213-B","213-C","213D","213-E","213-F","213-FA","213-G","213-H","213-K","213-L","213-M","213-N","213-P","213-QA","214","214-A","214-B","214-C","214-D","214-E","214-F","214-G","214-H","214-J","214-K","215","215-A","215-B","215-B (NS)","215-C","215-CA","215-D","215-E","215-F","215-G","215-H","215-I","215-J","215-K","215-L","215-M","215-MA","215-N","215-NA","215-P","215-Q","215-R","215-T","215-U","215-V","215-W","215-X","215-Y","215-Z","216","216-A","216-B","217","217-A","218","218-A","219","21-A","22","220-A","220-B","220-D","220-E","220-F","220-G","221","221-A","221-B","221-C","221-D","221-E","221-F","221-G","221-J","221-K","222","222-A","222-C","222-D","222-E","222-F","222-G","222-J","222-K","222-M","223-A","223-B","223-D","223-E","223-F","223-G","223-H","223-J","223-K","223-L","223-M","223-N","223-P","224","224-B","224-C","224-D","224-E","225","225-A","225-B","225-C","225-CA","225-D","225-E","225-F","225-G","225-H","225-J","225-K","225-L","225-M","225-N","225-P","225-S","226","226-A","226-B","226-C","226-D","226-E","226-F","226-G","226-J","226-K","226-L","226-M","226-N","226-P","226-Q","226-R","226-S","226-T","226-U","226-V","226-W","227","227-A","227-B","227-C","227-D","227-E","227-F","227-G","227-GA","227-H","227-J","227-K","227-L","227-M","227-N","227-NA","227-P","227-Q","227-R","227-RC","227-S","227-T","227-U","227-V","227-VA","227-W","227-X","227-Y","227-Z","228","228-A","228-C","228-E","228-F","228-G","228-J","229","229-D","22-A","23","230","230-A","230-C","231","231-A","231-B","231-C","231-D","231-E","231-F","231-G","231-H","231-J","231-K","231-N","231-P","233","233-A","234","234-A","234-B","234-E","235","235-A","235-B","235-C","235-D","235-E","235-F","235-G","235-H","235-J","235-K","235-L","235-M","235-N","235-P","235-Q","236","237","237-A","238","238-A","238-B","238-C","238-D","238-F","238-G","238-H","238-J","238-K","238-M","238-N","238-P","238-Q","238-R","238-T","238-U","238-V","238-W","239-A","239-B","239-C","239-D","24","240","240-A","240-B","240-C","240-D","240-E","240-F","240-G","240-H","240-J","240-K","240-L","240-M","240-N","240-P","240-R","241","241-A","241-B","241-C","241-D","241-E","241-F","241-G","241-H","241-J","241-K","241-M","241-N","242","242-A","242-AA","242-B","242-BA","242-C","242-D","242-E","242-F","242-FA","242-FB","242-G","242-H","242-J","242-JA","242-K","242-L","242-M","242-MA","242-N","242-P","242-PA","242-Q","242-R","242-RA","242-S","242-T","242-TA","242-TB","242-TC","242-U","242-V","242-VA","242-W","242-X","242-XA","242-Y","242-Z","242-ZA","242-ZB","242-ZC","243","243-A","243-B","243-C","243-D","243-E","243-F","243-G","243-H","243-J","243-K","243-M","243-Q","243-R","244","244-A","244-C","244-D","244-F","244-G","244-H","244-K","244-L","245","245-A","245-B","245-C","245-D","245-E","245-F","245-G","245-H","245-J","245-K","245-L","245-N","245-P","245-R","246","246-A","246-B","247","247-A","248","248-A","248-B","248-C","248-D","248-E","248-F","248-G","248-H","248-J","248-K","248-L","248-M","248-N","248-P","248-Q","248-R","248-S","248-SA","248-T","248-V","248-Y","249","249-A","249-D","24-A","24-B","24-E","24-F","24-H","24-N","25","250","250-A","250-AA","250-AB","250-B","250-C","250-CA","250-CB","250-CC","250-D","250-E","250-F","250-G","250-H","250-I","250-J","250-K","250-L","250-M","250-N","250-P","250-Q","250-R","250-S","250-SA","250-T","250-V","250-W","250-X","250-Y","250-Z","251","251-A","251-B","251-C","251-D","251-E","251-F","251-G","251-K","251-M","252","252-A","252-B","252-C","252-D","252-E","252-F","252-G","252-H","252-J","252-K","252-L","252-M","252-N","252-P","252-Q","252-T","252-U","253","253-A","253-B","253-C","253-D","253-E","253-F","253-G","253-H","253-J","253-K","253-L","253-N","253-P","253-Q","254","254-A","254-B","254-C","254-D","254-E","255","255-A","255-B","255-C","255-D","255-E","255-F","255-G","255-H","255-J","255-K","255-M","256","256-A","256-B","256-C","256-D","256-E","256-F","256-G","256-J","256-K","256-L","256-M","257","257-A","257-B","257-C","257-D","257-E","257-F","257-G","257-H","257-K","258","258-A","258-B","258-C","258-CB","258-CC","258-CD","258-D","258-E","258-F","258-G","258-J","258-K","258-L","258-M","258-N","258-P","258-Q","258-QA","258-R","258-S","258-SA","258-SB","258-T","258-TA","258-TB","258-U","258-V","258-VA","258-VB","258-W","258-WA","258-X","258-Y","258-YA","259","25-A","25-B","25-C","25-E","25-F","25-H","25-J","25-M","25-N","25-Q","26","261","262","262-A","263","263-A","263-B","263-C","263-D","263-E","263-F","263-G","263-H","263-J","263-K","264","264-A","265","265-A","265-B","265-D","265-E","266","266-A","266-B","266-C","266-D","266-E","266-F","266-G","266-H","266-J","266-K","266-M","267","267-A","267-B","267-C","268","268-E","269","269-A","269-B","27","270","270-A","270-B","270-C","270-D","270-E","270-F","271","271-A","271-B","271-C","271-D","271-E","271-F","271-G","271-H","271-J","271-K","271-L","271-M","271-P","271-Q","271-R","272","272-A","272-B","272-E","273","273-B","273-C","273-D","273-E","273-F","273-J","275","275-A","275-B","275-C","275-E","275-M","276","276-A","276-C","276-D","276-E","276-F","276-G","276-H","276-J","276-K","276-L","276-M","276-N","276-Q","276-R","277","278","278-A","278-B","278-D","278-E","278-K","279","279-A","279-C","279-E","279-F","279-G","279-J","279-K","279-R","27-A","27-E","27-N","28","280","280-A","280-B","280-C","280-D","280-E","280-F","280-H","280-J","280-K","280-L","281","281-A","281-C","281-D","281-F","281-G","282","282-A","282-B","282-C","282-D","282-E","282-F","282-G","283","283-A","283-B","283-D","283-E","284","284-A","284-AA","284-B","284-C","284-D","284-E","284-G","284-H","284-K","284-L","285","285-A","285-AA","285-B","285-BA","285-C","285-CA","285-CB","285-CC","285-D","285-E","285-F","285-G","285-H","285-J","285-JA","285-JB","285-K","285-L","285-M","285-MK","285-N","285-P","285-R","285-RA","285-RB","285-S","285-T","285-V","285-W","285-X","285-Z","286","286-A","286-B","286-C","286-D","286-E","286-F","287","287-A","287-B","287-C","287-D","287-E","287-F","287-G","287-H","287-J","287-JA","287-K","287-L","287-M","287-N","287-P","287-Q","287-R","287-S","287-T","288","288-A","288-B","288-C","288-D","288-E","288-F","288-G","288-H","288-J","288-K","288-L","289","289-A","289-B","289-C","289-D","289-E","289-F","289-H","289-J","289-K","289-L","289-M","29","290","290-A","290-B","290-C","290-D","290-E","290-F ","290-G","290-H","290-J","290-K","290-L","290-M","290-N","290-P","290-Q","290-R","290-S","290-T","290-V","290-W","290-X","290-Y","291","291-A","291-B","291-C","291-D","291-E","291-G","291-H","291-J","291-K","291-L","291-M","291-N","291-P","291-R","292","292-A","292-B","292-C","292-D","292-F","293","293-A","293-B","293-C","293-D","293-E","293-F","293-G","293-H","293-J","293-K","293-L","293-M","293-N","294","294-A","294-B","294-C","294-D","294-E","295","295-A","295-B","295-C","296","296-A","296-B","296-C","296-D","296-E","296-F","296-G","296-H","296-K","296-L","296-N","296-Q","296-T","296-V","297","297-A","297-B","297-G","298","298-A","298-B","298-C","298-D","298-E","298-F","298-G","298-J","298-K","298-M","298-MA","298-N","298-P","299","299-E","299-M","29-A","29-E","2-A","2-B","2-D","2-E","2-F","2-F/88","2-K","3","30","300","300-A","300-B","300-C","300-D","300-DA","300-E","300-F","300-G","300-H","300-J","300-K","300-L","300-M","300-N","300-P","300-Q","300-R","300-T","301","301-A","301-D","301-E","301-F","301-G","301-R","302","302-A","302-B","302-C","302-D","302-E","302-F","302-G","302-H","302-J","302-K","302-M","302-N","303","303-A","303-B","303-C","303-D","303-E","303-F","303-G","304","304-A","304-B","304-C","304-D","304-E","304-F","304-G","304-H","304-J","304-K","304-L","304-M","304-N","304-P","304-Q","304-R","304-S","304-T","304-V","305","305-A","305-B","305-C","305-D","305-E","305-F","305-G","305-H","305-J","305-K","305-L","305-M","305-N","305-P","305-Q","305-R","305-S","305-T","305-V","306","306-A","306-B","306-C","306-D","306-E","306-F","306-G","306-H","306-J","306-K","306-L","306-M","306-P","306-Q","306-R","306-S","307","307-A","307-B","307-C","308","308-A","309","30-C","30-E","31","310","310-A","310-B","310-C","310-D","310-E","310-Q","311","311-A","311-C","311-D","311-E","311-F","311-H","311-J","311-K","311-P","312","313","313-A","313-B","313-C","313-D","313-E","313-F","313-G","313-H","313-J","313-K","313-L","313-N","313-P","313-R","313-T","313-U","313-V","314","314-A","314-B","314-C","314-D","314-E","314-F","314-G","314-H","314-J","314-K","314-L","314-M","314-N","314-P","314-Q","314-R","314-S","314-T","314-V","314-X","315","315-A","315-B","315-C","315-D","315-E","315-F","315-G","315-H","315-J","315-K","315-L","315-N","315-P","315-Q","315-R","315-RA","315-T","315-U","315-V","315-W","315-Y","316","316-A","316-B","316-C","316-D","316-E","316-F","316-G","316-J","316-K","316-L","316-M","316-N","316-P","316-Q","316-R","316-T","316-U","317","317-A","317-B","317-C","317-D","317-E","317-F","317-G","317-J","317-K","317-L","317-M","317-MA","317-N","317-P","317-Q","317-R","317-S","317-T","317-V","317-W","317-Y","317-YA","317-YB","317-Z","318","318-A","318-E","319","319-A","319-B","319-C","319-E","319-F","319-G","319-J","31A","31-A","31-B","31-E","32","320","320-A","320-B","320-C","320-D","320-E","320-F","320-G","320-H","321","321-A","321-B","321-C","321-D","321-E","321-G","321-H","322","322-A","322-B","322-C","322-D","322-M","323","323-A","323-B","323-C","323-D","323-E","323-F","323-G","323-H","323-J","323-K","323-L","323-M","323-N","324","324-A","324-B","324-C","324-D","324-E","325","325-A","326-A","326-C","326-E","327","327-A","327-B","327-C","327-D","327-E","327-F","327-G","327-H","328","328-A","328-B","328-E","328-F","328-G","328-H","328-J","328-K","328-M","329","329-A","329-B","329-C","329-D","329-E","329-F","329-G","329-H","329-K","32-E","33","330","330-A","330-B","330-C","330-D","330-E","330-F","330-G","330-H","330-M","330-P","331","331-A","331-E","331-M","332","333","333-A","333-B","333-C","333-D","333-E","333-F","333-G","333-H","333-J","333-K","333-L","333-M","333-N","333-P","333-Q","333-R","333-T","333-Z","334","334-B","334-C","334-D","334-E","335","335-A","335-B","335-C","335-D","335-E","335-F","335-G","335-H","335-J","335-T","336","336-A","336-B","337","338","339","339-E","33-E","34","340","340-A","340-B","340-C","340-D","340-E","340-F","340-G","340-H","340-I","340-J","340-K","340-L","340-M","340-N","340-Q","340-S","341","341-A","341-B","341-C","341-D","341-F","341-G","341-H","342","342-A","342-B","342-C","342-D","342-E","342-F","342-FA","342-G","342-H","342-J","342-K","342-L","342-M","342-MA","342-N","342-P","342-Q","342-R","342-S","342-T","342-U","342-V","342-W","342-X","342-Y","342-Z","343","343-A","343-B","343-C","343-D","343-E","343-F","343-G","343-J","343-L","343-M","344","344-A","344-C","344-D","345","345-A","345-E","346","346-A","346-B","346-C","346-D","346-E","346-F","346-H","346-J","346-K","346-M","346-N","346-P","346-Q","346-R","346-T","347","347-A","347-B","347-C","347-D","347-E","347-F","347-G","348","348-A","348-B","348-D","348-E","348-F","348-G","348-J","348-K","349","349-A","349-B","349-C","349-D","349-E","349-F","349-G","349-J","349-K","349-L","34-A","34-B","34-C","34-D","34-S","35","350","350-A","350-B","350-D","350-E","350-G","351","351-A","351-C","351-H","351-J","352","352-A","352-E","353","353-A","353-B","353-C","353-E","354","354-A","354-C","355","355-A","355-B","355-C","355-D","355-Q","356","356-A","356-B","356-C","356-D","356-E","356-F","356-G","356-J","356-K","356-M","356-N","356-P","356-Q","356-S","357","357-A","357-G","358","358-A","359","359-A","35-B","35-E","36","360","360-A","360-B","360-C","360-D","360-E","360-F","360-G","360-H","360-J","360-K","360-L","360-M","360-N","360-P","360-Q","360-S","361","361-A","361-B","361-K","362","362-C","362-E","363","364","364-A","364-B","364-C","364-D","364-E","364-F","364-G","364-H","364-J","364-K","365","365-A","365-B","365-C","365-D","365-E","365-F","365-J","365-K","365-L","365-M","365-N","365-P","365-Q","365-S","365-W","366","366-A","366-B","366-C","366-D","366-E","366-F","366-G","366-I","366-J","366-K","366-L","366-M","366-N","366-P","366-Q","366-R","366-T","366-V","366-X","366-Y","367","367-A","367-B","367-C","367-D","367-E","367-F","368","368-C","368-D","368-E","368-F","369","369-A","369-B","369-C","369-D","369-E","369-F","369-G","369-H","369-L","369-M","369-N","369-P","36-A","36-B","36-D","36-E","36-F","36-G","37","370","370-A","370-E","371","371-A","371-D","371-F","372","372-A","372-B","372-C","372-D","372-E","372-M","373","373-A","373-B","373-C","373-E","373-F","373-G","373-J","373-K","373-M","374","374-A","374-B","374-C","374-D","374-E","374-F","374-M","375","375-A","375-B","376","377","377-A","378","37-A","37-B","37-C","37-D","37-E","37-F","37-G","38","380","380-B","380-C","380-E","380-F","380-G","380-H","380-M","381","381-A","381-B","381-D","381-E","381-F","381-G","382","382-A","382-M","383","383-A","383-B","383-C","383-D","398","398-A","398-B","398-C","398-H","399","399-A","399-B","3-B","3-C","3-D","3-E","3-F","400","400-A","400-B","400-C","400-D","400-E","401","401-A","401-B","401-BA","401-D","401-E","401-F","401-G","401-H","401-J","401-JA","401-K","401-L","401-M","401-MA","401-P","401-Q","401-R","401-RA","401-S","401-T","401-V","401-VA","401-W","401-Y","402","402-A","402-B","402-C","402-D","402-E","402-F","402-G","402-H","402-M","402-T","403-A","403-B","403-D","404","404-C","404-D","404-E","404-H","404-J","405","405-A","405-B","405-M","406","407","407-A","407-B","407-C","407-D","408","408-A","409","409-A","41","410","410-A","410-B","410-C","410-D","411-A","411-B","411-C","411-D","411-E","411-F","411-J","411-K","411-L","412","415","415-A","415-B","415-C","415-D","415-E","415-F","415-S","43","43-A","43-B","43-C","43-D","43-E","43-F","43-H","43-J","44","45","45-A","45-B","45-C","45-D","45-E","45-F","45-G","45-H","45-J","45-K","47","49","49-A","49-E","50","500","500-A","500-B","500-C","500-D","500-DA","500-DB","500-E","500-F","500-G","500-H","500-J","500-K","500-KA","500-KB","500-KC","500-KM","500-KR","500-KS","500-L","500-M","500-N","500-NC","500-P","500-Q","500-QA","500-R","500-T","500-TA","500-W","501","501-A","501-B","501-C","501-D","501-E","501-G","501-H","501-K","501-L","501-M","501-N","502","502-A","502-B","502-C","502-D","502-E","502-F","502-G","502-H","502-M","503","504","504-B","504-C","505","505-A","505-C","506","506-A","50-A","52","52-E","54","54-E","55","555","555-A","55-B","55-D","56","57-A","57-B","58","58-A","58-C","59","59-A","59-B","59-C","59-D","59-F","59-G","59-H","59-K","60","600","600-A","600-C","600-D","600-E","600-F","600-FA","600-G","600-K","600-KA","600-KC","600-M","601","60-A","60-B","60-C","60-D","60-E","60-F","60-G","60-J","60-K","60-L","60-N","60-P","61","61-A","61-B","61-C","61-E","61-F","61-G","61-H","61-J","61K","61-K","61-L","62","62-B","62-D","63","63A","63-A","63-B","63-E","64","64-D","65","65-B","66","68","7","70","71","74","75","75-A","75-B","75-C","75-D","75-E","75-F","75-G","75-H","76","76-E","77","77-A","77-B","77-C","77-D","77-E","77-F","78","78-A","78-E","79","79-A","79-B","79-D","79-E","79-F","79-G","79-H","79-J","79-K","7-D","7-E","7-F","7-G","80","80-A","80-B","80-C","80-D","80-E","80-F","80-G","80-H","80-R","81","82","82-A","82-B","82-C","83","83-C","83-D","84","85","86","86-E","87","87-A","87-B","87-C","87-D","87-J","88","88-A","88-D","88-E","89","89-A","89-B","89-C","89-D","89-E","89-F","89-G","89-H","90-E","91","91-B","91-C","91-D","91-E","91-F","92-E","93-B","93-C","94","94-A","94-C","94-D","94-E","95","95-A","95-B","95-D","95-E","96","96-A","96-B","96-C","96-E","96-F","96-G","96-H","96-J","96-K","98-B","98-C","98-D","98-E","98-F","98-G","99-A","99-B","99-E","BIAS-1","BIAS-11","BIAS-12","BIAS-2","BIAS-3","BIAS-4","BIAS-5","BIAS-6","BIAS-7","BIAS-8","BIAS-9","FDR-1","FDR-2","G","G-1","G-10","G-11","G-12","G-2","G-3","G-4","G5","G-5","G-6","G-7","G-8","G-9","K-1","K-2","K-3","MBS-11","MBS-14","MBS-2","MBS-24","MBS-25","MBS-6","MBS-8","MBS-9"];

var BUS_STOPS_LIST = ["Abhiman Studio","19th Main Cambridge School (Sub Stage)","Abbigere Cross","Alur","Cmti","Hospital","Jn. Of 14th Cross 8th Main","Jyothipura","Ravuthanahalli","Cil","Gollarahatti","Mallathahalli","Linganahalli","Karikalpalya","Doddaballapur","Muthugadahalli","Huskur (Hsr)","Tabaranahalli","Kenchanapura","Neraganahalli","Jalige","Marasandra Circle","Dodda Tumkur","Nagamangala","Devanahalli","Yarappanahalli","Bettanahalli","Kannamangala","Byatha","Gadenahalli","Chokkanahalli","Kakolu","Shettygere","Patalamma Temple","Bande Bommasandra","Sadenahalli","Indo Danish Farm","Bydarahalli","Gangawara","Mylappanahalli","Mutkur","Budigere","Manchappanahalli","Bagalur","Suggatta","Shivakote","Srinivasapura","Mavallipura","Iaf (Bellary Rd)","Huskur Village","Honnasandra","Venkatala","Kogilu","Kalathammanahalli","Attur","Basavanahalli","Kallahalli","Pillahalli","Tarabanahalli","Bellahalli","Nelamangala","Kannur","Kumbalahalli","Upparahalli","Alappanahalli","Thimmasandra","Kumbarahalli","Nagarur","Vidyaranyapura","Singapura","Jakkur","Jakkur Layout","Chikka Banavar","Dandupalya","Abbigere","Jadigenahalli","Byatarayanapura (Blry Rd)","Makali","Kannurhalli","Gejjagadahalli","Ramachandrapura","Srirampura Dasarahalli","Rachenahalli","Bagalkunte","Jalahalli East","Dodda Gubbi","Allalasandra Rly. Gate","Baliga Circle","Hmt House","Adur","Hirandahalli","Budigere Cr.","Lakshmisagara","Yentaganahalli","Bel Circle","Kenganahalli","Hebbal Kempapura","Peenya Dasarahalli","Dasarahalli","Vidyasagara","Devasandra","Nagasandra","Gokula","Chinnappa Layout","Govindapura","Alisda Factory","Parangi Palya","Geddalahalli","Nagavara","M S Ramaiah Col","Chelikere","Kaji Sonnenahalli","Veternary College","Medahalli","Kalyan Nagar","Hmt Layout","Chowdeswari Bus Stand","Nelagadaranahalli","Gangenahalli","Veeranahalli","Sultan Palya","Gangondanahalli","Rajani Farm","Makanahalli","Kavalbyrasandra","Doddanna Nagar","Rmc Yard (Ypr)","Sondekoppa","Kanteerava Studio","Cpri Gate","Dodda Banahalli","Rajivgandhi Nagar","Banaswadi","Rahmath Nagar","Govt Soap Factory","Ramamurthy Nagar","Muslim Colony","Pillanna Garden","Iti Colony","Sadashivanagar","Malleswaram Bus Stand","J C Nagar","Srs Kalyana Mantapa","Kammanahalli","Vijinapura","Subramanya Nagar","Hosapalya","Belthur","Malleswaram 13 Cr","Kittanahalli","Marappa Garden","Geleyara Balaga","Chinnappa Garden","Kurubarahalli","Dattatreya Temple","Chikka Banahalli","Navarang Talkies","Mariyappanapalya","Harischandra Ghat","Shankarmutt","Kasturi Nagar","Jeevanahalli","Srirampura Ashwath Katte","Byappanahalli","Hoodi Village","Esi Hospital","Byandanahalli","Kadabagere","Machohalli","Central Talkies","Csi Hospital","Sunkadakatte","Sadaramangala","Sheshadripuram College","Hegganahalli","Basaveswara Nagar","Andrahalli","Herohalli","Gandhi School","Sudduguntepalya","Rjnr-Rammandira","Jn. 1st Mn & 4th Cr (B'Ngr)","Bhashyam Circle","Cunningham Rd","Slaughter House","Naga Talkies","Lavanya Talkies","Kamakshipalya","Sujatha Talkies","Indian Express Circle","Isolation Hospital","Shivajinagar Bus Stand","A.G'S Office","Telephone Exchange","Basaveswara Nagar Circle","Gpo","Bisanahalli","Bylahalli","Kaveri Hotel","Lrde","C V Raman Nagar","Lakshmipura","Indiranagar Double Rd","M Dasarahalli","Chinmaya Mission Hospital","Kbs","M G Road","Hope Farm","Ulsoor","Mahatma Gandhi Statue","Electric B Stn.","Immadihalli","Vijayanagar Bus Stand","Binny Layout","Malleshpalya","Vignana Nagar","Tippasandra Cr","Doopanahalli","Goodshed Gate","Shoolay Circle","K R Circle","Mysore Bank Circle/Kaveri Bhavan","Pallavi Talkies","Nagarabhavi Bda 2nd S","Corporation Office","Baldwin Girls School","Bangalore Club","Kundalahalli","Cottonpet Hospital","Domlur","Subbaiah Circle","Kh Rd.","K R Market","Military Hospital","Ganapathipura","Bapuji Layout","Mudalapalya","Rpc Layout","Town Hall","Vjnr Maruthi Mandir","Sirsi Circle","Ramesh Nagar","Attiguppe","Manipal Hospital","Chandra Layout","Nagarabhavi Village","Plegamma Temple","Domlur Bus Stand","Nanjappa Circle","Chamrajpet","Kannahalli","Marathalli","Marathhalli  Borewell","Austin Town","Vannarpet","Chinnappanahalli","Ramagondanahalli","Bylakonenahalli","Sajjanrao Circle","Kempaiah Circle/Minerva","Jnanabharathi Campus","Magadi","Neelasandra","Wilson Garden Police Stn.","Koramangala 80 Ft Rd","North Road","Ramakrishna Ashrama","Lalbagh West Gate","Siddapura","Kempapura","Wilson Garden 10th Cr","Bhel (Mys)","Jantagondanahalli","Lakkasandra","Avalahalli Bda Park","Hanumanthnagar","Adugodi","Girinagar Circle","Ejipura","Nettakallappa Circle","Doddabasti","Nimhans","Nayandhalli","Srinivasnagar","Veerabhadra Nagar","Bangalore Dairy","Jn. Hosur Rd","Vidyapeeta Circle","South End Circle","Devarabisanahalli","Bellandur","Kenchenahalli","Koramangala","Mm Industries","Rajarajeswari Temple","Janatha Bazar (Kamakya)","Hoskerehalli","Jayanagar Bus Stand","Sanjaygandhi Hospital","Yediyur","Bagur","Gonighattapura","Kathriguppe","Kamakya Talkies","Deepak Nursing Home","Jnr 4th T Blk","Carmel Convent School","Balagere","Tavarakere.Magadi","Venkatapura","Gurappanapalya","Hunasemara","Ibbalur","Madiwala","Agara (Krm)","Banashankari","Jayanagar 9th Blk","Ragigudda Cr","Mico Lyt.","Jnr East End","Btm Lo Water Tank","Btm L Out","Bellandur Gate","Kadirenahalli Park","Kadirenahalli","Ganapathihalli","Kengeri","Chikkalasandra Village","Marenahalli","Chikkalasandra","Koothaganahalli","Nerige","Arehalli Ag Layout","Peddanapalya.M","Btm Layout Ews Colony","Mangammanapalya","Jp Nagar 24th Mn","Ganakal","Srinivasapura Hosa Badavane","Sarakki","Indo American Hybrid Farm","Parappana Agrahara","Chennasandra","Haralur","Halanayakanahalli","Isro Layout","Uttarahalli","Bommanahalli","Jaraganahalli","Hongasandra","Gunjur","Mullur","Bilekallahalli","Vijaya Bank Layout","Vasanthapura","Puttenhalli","Konanakunte Village","Garvebavi Palya","Arkere Gate","Chunchaghatta","Dommasandra","Banjara Palya","Kudlu Gate","Chikka Begur","Dabbaguli","Meenakshi Temple","Kothnur","Singasandra","Nyanappanahalli","Kambipura","Hulimavu Gate","Hulimavu","Kudlu","Hosa Road","Ghattahalli","Chikkegowdanapalya","Talaghattapura","Begur","Kade Agrahara","Avalahalli (Kpr Rd)","Dodda Nagamangala","Gottigere","Devagere","Kumbalagodu","Chintala Madiwala","Vittasandra","Subbarayappanapalya","Gangasandra","Konappana Agrahara","Weavers Colony","Muthanallur","Hampapura","Ramasandra","Bannikuppe","Gonipura","Shikaripalya","Hulimangala","Kulumepalya","Uttari","Borehalli","Heelalige","Bommasandra","Adigondanahalli","Bannerghatta","Bannerghatta National Park","Kaggalipura","Chandapura","Kittaganahalli","Koppa Gate","Koppa","Akkipikki Colony","Bidadi","Vajarahalli","Begihalli","Chandapura Circle","Bande Nalsandra","Kyalasanahalli","Parasanapalya","Guddahatti","Jigani","Hennagara","Ramakrishnapura","Jigani High School","Bukkasagara","Bandapura","Rajapura","Giddenahalli","Haragadde","Sundaram Estate","Naganayakanahalli","Nettigere","Mukkodlu","Somanahalli","Shettyhalli","Ravagodlu","Konasandra","Gottigehalli","Sidi Hoskote","Shivanahalli","Kaggalihalli","Gabbadi","Byrapura","Railway Gollahalli","Iaf Gate","Narasipura","Yelahanka Sat Town 4th Ph","R K Hegde Nagar","Mandur","Kuduregere","Mestri Palya","Nagashettyhalli","Hmt Watch Factory","Horamavu","Malleswaram 18 Cr","Itc Factory","Srirampura Harischandra Ghat","Cant. Rly. Stn.","Swastik","Pattandur Agrahara","Trinity Church","Mayo Hall","Jeevanbima Nagar","Vinayakanagar","Hal Main Gate","Commando Hospital","Sulikere","Krm Canara Bank","Byrasandra","Devadiga Soudha","Sangam Circle","Mugalur","Kengeri Regional Workshop","Jpn 6 Ph-Sarakki","Kachamaranahalli","Hejjala","Narayanaghatta","Attibele Border","Hinnakki","Attibele","Hosahalli","Judicial Layout","Adarsha Nagar","Yeshwanthpur Bus Stand","Nandini Layout","Mysore Bank Colony","Nanda Talkies","Koramangala Complex","Krm Kendriya Sadan","John Fowler","Byrohalli","Rayasandra","Eswar Layout","Anchepalya","Nagegowdanapalya","Mylasandra","Jigala","Kalkunte Agrahara","Kempegowda Bus Stand","Yelahanka","Bengaluru International Airport","Binnamangala","Shanthinagar Bus Stop","Mysore Road Satellite Terminal","Mahadevapura","Tippasandra","Apollo Hospital","Silk Board Junction","Abbina Kuppe","Achyuthanagara Gate","A.Cross","Adde Vishwanathpura","Adichunchanagiri Shakha Matt","Ado Sonnahatti","Aecs Dental College","A.E.C.S.Layout","Agrahara Palya Gate","Agrahara Village","Ags Layout Arehalli","Ajantha Talkies","Ajantha Talkies/ Lavanya Talkies","Ajjagondanahalli","Akkupet","Al-Ameen Residency School","Adakimaranahalli","Abb Factory","Accounts Office","Adigara Kallahalli","Adugodi Police Qtrs","Alambadi","Alammanapalya","Allalasandra Cross","Allasandra Gate","Alli Bommasandra","Amarajyothi Layout","Ambedkar Medical College","Amruthnagar","Anagalipura Cross","Ananda Nagara","Anand Rao Circle","Ananthapura","Ananthapura Gate(Vinayaka Layout)","Anche Muskuru","Anchipura Colony","Anjananagara","Annapoorneshwari Nagar","Anugondanahalli Cross","Anupanahalli","Apc Circle","Apco Factory","Aralimaradapalya","Aralimaradapalya Cross","Arasanahalli","Are Binnamangala","Arenur","Arisinakunte","Arjuna Bettahalli","Ashok Pillar","Ashwathnagar","Attimgere Gate","Attur Gate","Avalahalli Bda Layout Cross","Avalahalli New Bda Lay Out","Avaragere Cross","Avaregere","Avarehalli","Avarehalli Cross","Averahalli Gate","Ayyappanagar","Azeez Palya","Babasabpalya","Badekatte","Bagalakgunte Village","Bagalgunte Cross","Allalasandra","Ashrama","Anagalipura","Anchipura","Annasandra Palya","Anjanapura","Anneshwara","Aps Collge Cross","Arakere","Aradeshanahalli","Arehalli Cross","Amarajyothi Badawane","Attur Layout","Attivatta","Avalahalli","Ayyappa Temple","Baagur","Bachahalli Gate","Badrappa Layout","Balageranahalli Cross","Balaji Badavane","Balaji Nagar","Balepura","Bale Veeranahalli","Ballur","Ballur Cross","Banandur","Banarahalli","Banashankari 1st Stage","Banashankari 2nd Stage Bda Complex","Banashankari 2nd Stage (Channammanakere)","Banashankari 2nd Stage(Jn.Of 21st Main 13th Cross)","Banashankari 3rd Stage 2nd Phase(Srividhyanagara)","Banashankari 3rd Stage 3rd Phase","Banashankari 3rd Stage Srividya Nagara","Banashankari Bus Station","Banashankari Bus Station 2nd Stage Bda Complex","Banashankari Bus Station 3rd Stage 3rd Phase","Banawara","Bandaiahana Palya","Bandakodigehalli","Banda Kodigehalli Palya","Bandemaramma Bus Stand","Bandireddy Circle","Bangalore Children Hospital","Bangalore Diary Cirle","Bangalore Milk Diary","Bangalore University Gate","Bangarappa Nagara","Bannerghatta Circle","Bannigiri","Bapuji Layout(Saraswathi Nagar)","Bapujinagar","Bargur","Barthnagar Ist Stage","Basappanapalya","Balagere Cross","Banashankari Bda Complex","Bangalore Central Jail","Bangalore University Administrative Block","Basavanagudi Polce Station","Basavanagudi Post Office","Basavanapalya","Basavanapura Gate","Basavangara","Basavanna Temple","Basavapura","Basaveshwaranagar","Basaveshwaranagara 3rd Stage (Saneguruvanahalli)","Basaveshwaranagara Bus Station","Bashyam Circle","Bashyam Nagara  (Srirampura)","B.C.C.Layout","Bcc Layout Cross Jn.Of Chord Road","Bcc Layout Raguvanahalli","B.Channasandra","B.Channasandra Bridge","B.Channasandra Railway Bridge","Bda Bus Bay","Bds Nagara","Bds Nagara (K.Narayanapura)","Beedi Karmikara Badavane","Beggars Colony","Begum Mahal","Belagumba","Belathur Cross","Bellakempanahalli","Bellikere","Bel Market","Belthur Village","Beml 5th Stage","Beml Complex","Beml Gate","Beml Layout","Beml Layout 5th Phase","Beml Layout Complex","Bendiganahalli","Bendiganahalli Cross","Beniganahalli","Benniganahalli Bridge","Benson Town","Benson  Town Level Cross","Bethanagere","Bettadasanapur","Bettadasanapura Cross","Bettahalasur","Bettahalli","Bettahalli Kaval","Bettahalli Palya","Bettahalsur Cross","Bettanagere Cross","Bettanapalya","Bgs Health City","Bgs Inter Main Gate","Bhakthanapalya","Bhaktharahalli","Bhaktharahalli Cross","Bhakthipura","Bhakthi Yoga Ashrama","Bhcs Layout","Bharath Nagar","Bharathnagar 2nd Phase","Bharathnagara Ist Phase","Bhattarahalli","Bhattaramarenahalli","Bheemanakuppe","Bheemanakuppe Cross","Bhel Concrode Layout","Bhel Layout","Bhimajyothinagara","Bhimajyothinagara (Shankara Muth)","Bhoopasandra","Bhovi Colony","Bhovi Palya","Bhuvanagiri","Bhuvanahalli Gate","Bhuvaneshwari Nagar","Bhuvaneshwarinagara Mahalakshmi Temple","Bidalapura","Bidarahalli","Bidruguppe","Bikkanahalli","Bikkana Hosahalli","Bilawaradahalli","Bilekalli","Bileshivale","Bilijaaji","Billamaranahalli","Billamaranahalli Cross","Billapura","Bimakanahalli","Binni Layout","Biskur","Bloom Field Garden","B.Nagra 3rd Stage(Saneguravanalli)","B.Narayanapura","B.N.Bachegowda Badawane","Bodanahosahalli","Boganahalli","Bogana Hosahalli","Bokipura","Bolamaranahalli","Bombay  Dyeing","Bommachanahalli","Bommanabande","Bommandahalli","Bommasandra Village","Bommashettihalli","Bommawara","Bommenahalli","Boodamanahalli","Boodigere","Borewell Cross","Bowring Institute","Brahmma Devara Gutte","Bridge","Brindavan Outer Ring Road","Brundavan Nagara Jinkevana","Brv College","B.S.F.","Bsk 1st Stage","B.S.K.2nd Stage 24th Cr 21st Main Road","Bsk 2nd Stage Bda Complex","Bsk 2nd Stage.Jn.Of 24th Cr 1st Main","Bsk 2nd Stage.Jn.Of 24th Cr 21st Main","B.Station","Btl College","B.T.M.Layout","Btm Layout 4th Stage","Btm Layout (Kuvempunagar)","Btm Lay Out South","Btm Layout South (Mahadeshwar Nagara)","B.T.S. Layout (Jn.Of Bda Ring Road)","Buc Gate/Jnanabharathi Ladies Hostel","Budigere Cross","B.V.R. Industry","Byadarahalli","Byagadadenahalli","Byalalu","Byalalu Janatha Colony","Byalanahalli","Byandahalli","Byarasandra","Byatarayana Doddi","Byatarayana Doddi Cross","Byatarayanapura","Bychapura","Bylanjaneya Temple","Byramangala","Byramangala Cross","Byrathi","Byregowdana Doddi","Byregowdanahalli","Cambridge Layout","Cambridge Layout/Military Accounts","Cant. Railway Stn.","Carmelaram Gate","Carmel Convent","Cauvery Bhavan","Cauvery Hotel","Cement Factory","Central Jail","Central Seed Production Farm","Central Silk Board","Chacklet","Chamarajapet (P.C.Circle)","Chamarajapet Play Grounds","Chamundi Nagar","Chandapura Cross","Chandra Layout 1st Stage","Chandra Nagara","Chandrappa Cricle","Channahalli Gate","Channamaraiahna Palya","Channammakere","Channammanakere Achukut","Channasandra","Channasandra Bridge","Channasandra Railway Bridge","Channdasipalya","Channegowdana Doddi","Channenahalli","Chapparadakallu","Chattekerepalya","Chaya Nursing Home","Cheemandahalli","Cheemasandra","Cheemasandra Cross","Chelkere Extension","Chellahalli","Chennammanahalli","Chika Nagamangala","Chikka Bagade","Chikka Banavara Railway Station","Chikka Banavara Santhe Beedi","Chikkabanawara","Chikkabelavangala Gate","Chikkabidarakallu","Chikka Dasarahalli","Chikka Gollarahatti","Chikka Gollarahatti Cross","Chikka Gubbi","Chikka Gubbi Cross","Chikka Indlavadi","Chikkajala","Chikkakallasandra","Chikka Kallasandra Sarige Nagar","Chikka Kellur","Chikka Kukkanahalli","Chikka Kuntanahalli","Chikkalasandra Bus Stand","Chikkalasandra Mahesh Medicals","Chikkalasandra Naidu Layout","Chikkalasandra Ramanjaneya Layout","Chikkallasandra Aralimara","Chikka Maranahalli","Chikkamariyappanapalya","Chikka Maskal","Chikkammanahalli","Chikkammana Palya","Chikkanahalli Gate","Chikkanahallil","Chikkananahalli","Chikkanana Palya","Chikkanayakanhalli","Chikka Nekkundi","Chikkannalluru","Chikka Thimmasandra","Chikka Thirupathi","Chikka Tirupathi Cross","Chikka Tumkur","Chinnaiahnapalya","Chinnaiahnapalya Cross","Chinnaiahnapalya (Silk Farm)","Chinnappa Garden Iti Layout","Chndrakala Soap Factory","Chokkanahalli Gate","Chokkasandra","Chokkasandra Cross","Choodahalli","Choodasandra","Chowdappanahalli","Chowdenahalli","Chowdeshwarinagara","Chowdeshwari Temple Cross","Chowdeshwary Bus Station","Chunchankuppe","Cilpil Factory","City Light Apartment","City Railway Station","C.K.Thandya","Clarence School","C.M.T.I.","Coconut Garden","Coffee Board Layout","Coles Park","Colony","Corporaton","Cox Town Circle","Cpri","C.P.R.I","C.P.R.I. Gate","Cpri / Sadashivanagara Police Station","Csi","Csi/Institute Of Engineers","C.V.Raman Nagar","Dabbaguli Cross","Dabbalaguli Gate","Damodara Nagara","Dasanapura","Dasarahalli 8th Mile","Dattatreya Nagara","Dattatreya Temple (T.R.Nagara)","Dayananda College Cross","Dayanandasagar College","Dayanandasagar  College Cross","Deepanjalinagara","Devadiga Soudha Cross","Devaganahalli","Devalapura","Devamachohalli Cross","Devanagundi Colony","Devanagundi Cross","Devanagundi Railway Station","Devanahalli Cross","Devangundi","Devara Bisanahalli Cross","Devarachikkanahalli","Devashettyhalli","Devinanjaiahanapalya","D Group Employees Layout","D-Group Layout","Dhananayakanahalli (Gangothri Badavane)","D. Hosahallli","Dibbur","Dibbur Gate","Dinnepalya","Dodda Alada Mara","Doddaballapura Railway Gate","Doddabasavanna Temple (Keb Office)","Doddabasti Cross","Dodda Bele","Dodda Bettahalli","Dodda Bidarakallu","Doddabyalakere","Dodda Dunnasandra Cross","Dodda Gattiganabbe","Doddahatti Gate","Doddahatti Village","Dodda Hullur","Doddajala","Doddakahalli","Doddakukkanahalli Cross","Doddakuntanahalli","Doddamaranahalli","Doddanallurahalli","Doddanekkundi","Dodda Nekkundi Cross","Doddanekkundi/Railway Bridge","Doddanekkundi/Railway Station","Doddanellur Cross","Dodda Sanne","Dodda Thimmasandra","Dodda Thimmasandra Cross","Dodda Thogur","Dodderi","Dodderigrama","Doddipalya","Domlur Bus Station","Domlur Cross","Dommasandra Circle","Donnenahalli","Dr.Ambedkar College","Dr. Ambedkar Institute Of Technology(Kengunte)","Dr.Ambedkar Nagara","Dr.Ambedkar Vidya Mandira","Drdo 2nd Phase","Drdo Quarters","Drdo Township 2nd Phase","Dr Rajkumar Punya Bhoomi.","D.Shetta Halli","Dubasi Palya","Dunnasandra","Duo Heights Layout","Dwarakanagar","Dyavalingaiahna Palya","Dyavarahalli Gate","Eagleton Resorts Gate","East West College Cross","Electric ‘B’Station","Electric B.Station","Electronic City","Electronic City(Bhel)","Electronic City Circle","Electronic City Depot No.19 Gate","Electronic City Infosys Corporate Office","Elgin Flour Mill","Eliyas Nagar Ring Road","Eltheri","E. Muthasandra","Erandahalli","Erthaganahalli","Erthaganahalli Gate","Estate","Estate Gate","Faizabad","Farm House","Fci Colony","Food Corporation Of India","Forest Gate","Frazer Town","Freedom Fighter Colony","Fruit Market","Gajendranagara","Gajendranagara (Anepalya)","Ganagalu","Ganagalu Cross","Gandaragollipura","Gandhi Bazaar","Gandhi Grama","Gandhipura","Ganesh.B","Ganesh Bhavan","Gangamma Circle","Ganganagar","Gangappanahalli","Gangappanapalya","Gangapura","Gangenahalli Hmt Layout","Gangondanahalli Cross","Ganigarahalli","Gantagana Doddi","Gantagana Doddi Cross","Garudacharpalya","Gottigerepalya","Gavigangadhareshwara  Temple","Gaviyanapalya","Gayathri Layout","Geddalapura","Geleyara Balaga Extension","General Post Office","Gerahalli","G. Hosahalli","Gidada Konenahalli","Gidada Palya","Giddenahalli Cross","Girigowdana Doddi","Girinagar 2nd Stage","Girinagara Extension","Girinagrfa Extn.","G.K.V.K.","G.K.W.Layout","Gkw Layout","Golf Club","Gollahalli","Gollahalli Railway Gate","Gollara Halli","Gollarapalya","Gonighattapura Cross","Goodshed Road","Gopal Estate","Gopalpura","Gopasandra Cross","Goraguntepalya","Goraguntepalya Cross","Gottipura","Govardhan Talkies","Government Hospital","Government Soap Factory","Gowdahalli Cross","Gowdanahalli","Graphite India Limited","Grind Well Norton","Grindwell Norton (Skf)","Gubbalala","Guddadahalli Dinne","Guddaiahna Palya","Guddatti Cross","Guddatti Gate","Gudipalya","Gulganjanahalli","Gulganjanahalli Cross","Gulimangala","Gulkamalai","Gullahatti Kaval","Gunakmale","Gundanjaneya Swamy Temple","Guni Agrahara","Gunjur Palya","Gunjur Palya Cross","Gurappanapalya (Bannerghatta Rd)","Guruva Bhovi Palya","Guruvanahalli","Guttepalya","Hagadoor","Hagalahalli","Hakki Pikki Colony","Hakkipikki Colony Cross","Hal 3rd Stage","Halage Vaderahalli","Hal Airport","Halanayakanahalli Cross","Halappanahalli","Halasahalli","Halehalli","Hal Jn. Of Nagasandra Road","Hal Kalyanamantapa","Halsur","Halubavipalya","Hampinagar","Hampi Nagar (Rpc Layout)","Handenahalli","Hangarapalya","Haniyur","Haniyur Cross","Hanmanthnagara Ward Office","Hanumanthegowdana Palya","Hanumanth Nagar W.Off","Haralur Cross","Haro Kyatanahalli","Hasanala","Hasigala","Havanoor Circle/Bsvn","Havanur Circle","Hbr 2nd Stage 29 Kg","Hbr Kptcl Layout","Hbr Layout 2nd Stage 29-30 Kg Layout","Hbr Layout 2nd Stage Bda Park","Hbr Layout 5th Phase","Hbr Layout 5th Phase Forest Office","Hbr Layout Bda Complex","Hbr Layout Ist Stage","Hbr Lyout Kptcl Office","Hebbagodi","Hebbagodi Cross","Hebbagodi Industrial Area","Hebbal","Hebbala Bridge","Hebbala Diary Farm","Hebbala Military Diary Farm","Hebbala Ring Road","Hebbal Police Station","Heggade Devanapura","Hegganahalli Cross","Hejjala Cross","Hejjala Gate","Heligehalli Colony","Hennur","Hennur Cross","Herohalli Cross","Hesaragatta Indo Danish Farm","Hesaragatta Village","Hesaraghatta","Hesaraghatta Tb Cross","Hesaraghatta Vinayaka Nagara","H.Gollahalli","Hilal Nagara Cross","Hilal Nagara Hbr Ist Stage","Hmt Auditorium","Hmt Colony","H.Nagar Ward Office","Hnr Ward Office","Hombegowda Nagar 7th Cross","Hombe Gowda  Nagara Ps","Hombegowdanagara P Stn (Wilson Garden Ps)","Hombegowda Nagara P.Stn(Wilson G.P.Stn)","Hombegowda Nagar Police Staion","Hommadevanahalli","Honachanahalli","Hongasandra Mico Layout","Hoodi","Hoodi Railway Gate","Hoovinayakanahalli","Horamavu Agara","Horamavu Petrol Bunk","Hosa Byappanahalli","Hosa Doddi","Hosahalli Palya","Hosakerehalli","Hosakerehalli Kere Kodi","Hosakerehalli Village","Hosakote Kere Kodi","Hoskerehalli Cross","Hoskote","Hoskote Bus Stand","Hoskote High School","Hoskote Kodi","Hostel","Hosur","Hosur Bande","Hosur Road","Hoysala Nagar","Hsr 2nd Sector Aishwarya Apartments","Hsr Layout 19th Main Cambridge School","Hsr Layout 2nd Sector","Hsr Layout 2nd Sector 19 Main13th Cross","Hsr Layout Bda Complex","Hsr Layout Si Apartment","H.Tippu Nagar","Hulimangala Cross","Hulimavu Village","Hullahalli Cross","Hullahalli Village","Hullalu Satelitte Town","Huluvenahalli Cross","Hunasamaranahalli","Hunasoor","Huncharahalli","Hunisemaradapalya","Hunnigere","Huralichikkanahalli Gate","Huskur","Huskur Cross","Huskur Gate","Huvinayakanahalli Cross","Hyadalu","Hyadalu Cross","I.A.F.","Iaf Chimni Hills","I.A.F.Gate","I.A.F. (Gymnasium)","Ichangur","Iggalur","Iliyasnagar","Iltheri Cross On Ivc Road","Income Tax Layout","Indian Express","Indiranagara","Indiranagara Esi Hospital","Indiranagar Police Station","Indiranagar P.S.","Indlabele","Indlavadi","Indlavadi Cross","Indrasanahalli","Industrial Area","Industrial Area Hebbagodi","Inner Ring Road Bridge","Inner Ring Road Under Pass","Ioc","Iskon Temple","Islampura","Isro Quarters","Istitute Of Engineers","Itc East Colony Circle","Iti Colony East Circle","Iti East Colony Circle","I.T.I. Layout","I T I Layout Mallathhalli","Itkalpura Gate","I.T.P.L.","Ittakalpura Cross","Ittamadu","Ittamadu  Village","Ittige Factory","Ittina Neela Apartments","Ivarakandapura","Jagadish Nagara","Jagajeevanramnagara","Jaibeemanagar (Btm Layout 1st Stage )","Jaibheemanagara","Jai Bhuvaneshwarinagara","Jai Maruthinagara Nagara","Jai Maruthinagara  Ravi Badavane","Jaipura Doddi","Jai Ramadas","Jakkasandra","Jakkasandra Cross","Jalahalli Cross","Jalahalli East Area 7th Camp","Jalahalli Village","Jalavayu Vihar","Jalli Machine","Jambusavari Dinne","Janapriya Apartment","Janapriya Nivas Apartment","Janapriya Township","Janatha Colony","Jangalpalya","Jangamakote","Jaraganahalli Cross","Jayanagar 4th Block","Jayanagar 5th Block","Jayanagar 9th Block","Jayanagara 9th East","Jayangar 9th Block East","Jayangar Bus Station","Jayanthi Nagara","Jayapura","J.C.Nagar","J.C.Nagara (M.R.Palya)","Jeevanbhimanagar","Jettipalya","J.H.B.C.S Layout","Jhbcs Layout Cross","Jigani Bus Stand","Jigani Industrial Area","Jims Institute Of Technology","Jinka Thimmanahalli","Jinke Bachahalli","Jinnagara","Jinnagara Cross","Jittige Factory","Jn.0f 80 Ft.&100 Ft.Road","Jn.24th Cr 21st Main Bda Complex","Jnana Jyothinagara 2nd Phase","Jn.Laxmanrao Nagara","Jn.Mysore Rd & Outer Ring Road","Jn.Nagawara Road","Jn.Of 100 Feet Road & 80 Feet Road","Jn.Of 100ft Road & 80ft Road","Jn.Of 12th Main 7th Cross (Btm Layout)","Jn. Of 13th Cross 21st Main","Jn.Of 14th Main","Jn.Of 14th Main Hsr Layout","Jn.Of 15th Cross 8th Main(J.P.Nagar 3rd Phase)","Jn.Of 19th Main & 13th Cross","Jn Of 1st Main & 4th Block","Jn.Of 1st Main 4th Cross","Jn. Of 24th Main","Jn.Of 24th Main 9th Cross","J.P.Nagar 1st Phase","Jn.Of 4th Main 4th Cross","Jn. Of 4th Main Ist Cross","Jn.Of 7th Cross 12th Main (Btm Layout)","Jn.Of 80 Feet &100 Feet Road","Jn.Of 80feet & 100 Feet Road","Jn.Of 80 Feet Road & 100 Feet Road","Jn. Of 80 Feet Road & 100 Feet Road","Jn.Of 80 Feet Road & 100 Ft Road","Jn.Of 80 Feet Road & Nb Road","Jn.Of. 80 Ft.& 100 Ft. Road","Jn..Of 80 Ft. & 100 Ft.Road","Jn.Of 80 Ft / 100 Ft.Road","Jn.Of 80 Ft & 100 Ft.  Road","Jn.Of 80 Ft. & 100 Ft.Road","Jn.Of 80 Ft. 100 Ft.Road","Jn. Of 80 Ft. & 100 Ft.Road","Jn. Of 80 Ft. & 12th Main","Jn.Of 80 Ft.  New Bridge Road  (Rajendranagara)","Jn.Of 80 Ft.Rd (Rajendra Nagara)","Jn.Of 80 Ft.Road 100 Ft.Road","Jn.Of 80th Ft & 100 Ft.Road Of Krm.","Jn. Of 8th Main & 3rd Cross","Jn.Of 8th Main 7th Cross","Jn.Of  8th Main 7th Cross  Koramangala","Jn. Of 9th Main","Jn. Of 9th Main 3rd Cross","Jn.Of Adigondanahalli Road","Jn.Of Airport Road","Jn.Of Anekal Road","Jn. Of Ashwath Nagar Road","Jn.Of Attivatta Cross","Jn.Of Bda Ring Road","Jn.Of Bellary Road","Jn.Of Bidadi Road","Jn.Of Bikkanahalli Road","Jn.Of Brigade Road","Jn.Of Btm Layout 100ft Road","Jn.Of Central Silk Board Road","Jn. Of Central Silk Form Quarters","Jn.Of Chikka Thirupathi Road","Jn.Of Chord Road Bcc Layout Cross","Jn.Of Chowdeshwarinagara","Jn.Of C.K. Thandya","Jn.Of Dasarahalli Road","Jn.Of Dodda Aladamara Road","Jn.Of Doddanekkundi","Jn.Of Dollars Colony Bridge","Jn.Of Eliyasnagar On 100 Ft.Ring Road","Jn.Of Gangenahalli","Jn.Of G.Hosahalli Road","Jn.Of Gollahalli Road","Jn.Of Gottipura On Nh Road","Jn.Of Hal And Domlur Road","Jn.Of Halasahalli Road","Jn.Of Hebbala Ring Road","Jn. Of Hennagara Road","Jn.Of Hosakerehalli","Jn Of Hosur Road","Jn.Of Hosur Road Check Post","Jn.Of Hsr Layout 14th Main","Jn. Of Hsr Layout 19th Main 13th Cross","Jn. Of Hulimanagala","Jn.Of  Inner Ring Rd.Bridge","Jn.Of Inner Ring Road","Jn.Of Jalahalli Road Tumkur Road","Jn. Of Jigani","Jn. Of Kachohalli Road","Jn of Kaggalipura","Jn. Of Kanteerava Nagar","Jn.Of Kanteerava Studio","Jn.Of Kasthurinagara Cross","Jn Of Kasturinagar","Jn. Of Kathriguppe Cross (Hosakerehalli Cross)","Jn.Of Katriguppe","Jn.Of Kerekodi","Jn.Of Kommaghatta Road","Jn.Of Kondenahalli Road","Jn.Of Koramangala 80 Feet & 100 Feet Road","Jn.Of Koramangala 80 Feet Road","Jn.Of Kothanur Road","Jn.Of Kr. 80 Ft. Road","Jn Of Krm 80 Ft & 100 Ft. Road","Jn.Of Krm 80 Ft.& 100 Ft.Road","Jn.Of Krm 80ft  Rd.(Rajendra Nagara)","Jn.Of Krm 80 Ft. Road & 100 Ft. Rd.","Jn. Of. Lakshman Rao Nagara Road","Jn.Of Magadi Road","Jn.Of Magadi Road & Siddaiah Puranik Road","Jn.Of Mahadevapura","Jn Of Mahadevapura Cross","Jn.Of Malur Circle","Jn.Of Manchappanahalli","Jn. Of Marathahalli (Borewell)","Jn.Of Marathhalli Ring Road","Jn.Of Marthhalli Bridge","Jn.Of Mele Nallasandra Road","Jn.Of Mkk Road & Manjunatha N. Thimmaiah Rd","Jn. Of Muthanallur","Jn.Of Mysore & Ring Road","Jn.Of Mysore Road","Jn.Of Nagawara","Jn.Of Nanjapura Road","Jn.Of Nayanahalli Road","Jn.Of Nelamangal Road","Jn.Of New Bridge/ Over Bridge","Jn. Of New Bridge Road","Jn. Of Nh-7","Jn. Of Nice Road","Jn.Of Oil Mill Road","Jn.Of Outer Ring Road Mysore Rd.","Jn.Of Pandithana Agrahara","Jn.Of Pantharapalya Ring Road","Jn. Of Peenya 2nd Stage Road","Ring Road","Jn.Of Peenya Road","Jn.Of Purada Palya","Jn.Of Ring Rd & Hosakerehalli Rd.","Jn.Of Ring Road","Jn.Of Ring Road Bridge","Jn.Of Ring Road & Mysore Rd.","Jn. Of Sarjapura","Jn.Of Sarjapura Road","Jn.Of Sriramapura","Jn.Of Srirampura Road","Jn. Of Sumanahalli","Jn. Of Tumkur Road","Jn. Of Tumkur Road N.H.","Jn.Of Vajarahalli","Jn.Of Veerabhadranagara","Jn. Of Veeranahalli Road","Jn.Of Yellukunte Mangammanapalya","Jodi Aladamara","Jodi Ragi Thimmasandra","Jodi Thimmasandra","Jogerahalli","Jogerahalli Cross","Johnson Market","J.P.Nagar24th Main 9th Cross","Jp.Nagar 3rd Phase","J.P Nagar 6th Phase","J.P.Nagar  Phase 1st Phase","Junction  1st Main 4th Cross","Junction  Of 4th Main Ist Cross","Jyothinagara (Janatha Colony)","Kachamaranahallil","Kacharakanahalli Cross","Kacharkanahalli","Kachohalli","Kadabagere Cross","Kadabisanahalli","Kada Grahara Cross","Kada Sonnappanahalli","Kada Yarappanahalli","Kadirenahalli Cross","Kadirenahalli Village Cross","Kadirenhalli Village","Kadugondana Halli","Kadugudi","Kadugudi Bus Stand","Kadugudi Bus Station/Sathya Sai Ashrama","Kadugudi Police Station","Kadumane Hotel","Kaggadasapura","Kaikondrahalli","Kaji Hosahalli","Kaji Sonnenahalli Gate","Kaka Ramanahalli","Kaka Ramanahalli Cross","Kakkehalli","Kalaiahnapalya Cross","Kalegowdanapalya","Kalenahalli","Kaleshwari","Kalidas Layout","Kalkre","Kallabalu","Kallaghatta","Kallahalli Gate","Kallodu","Kallubalu Cross","Kallur","Kalya Gate","Kalyana Bhavana","Kalyanagara Bus Stand","Kalyananagara","Kamakshi Layout (Bramhakumari Eswariya Vidyalaya )","Kamakshipura","Kamakshipura Cross","Kamalanagara","Kamalanagara Beml Layout","Kamala Nagara (Market)","Kamalanagara Old Bus Stop","Kamalanagara Road","Kamalanagara Water Tank","Kamalanehru Extension","Kamalanehru Extn.","Kamalanehru Extn.(Bombay Dyeing)","Kamarasanahalli","Kambalipura","Kammagondanahalli","Kammagondanahalli Bridge","Kammagondanahalli Temple","Kammanalli Extension","Kammasandra","Kammasandra Cross","Kammasandra Palya","Kanakanagara Gate","Kanasawadi","Kanasawadi(Mudhure Temple)","Kanchugaranahalli","Kanchugaranahalli Colony","Kanegowdanahalli","Kanikal","Kanivemadapura Cross","Kanminike","Kannamangala Cross","Kannamangala Gate","Kannamangala Palya","Kanteeravanagara","Kanuvanahalli","Karabele","Karalapura","Kareemsab Layout","Karekalpalya Gate","Karenahalli","Karibeeranahosahalli Cross","Karikalpalya Cross","Kariobanahalli","Karishma Hills","Karlapura Gate","Karlapura Palya","Karnataka Legislative Home","Karnataka State Ware Housing Godown","Karpuru","Karpuru Gate","Kasaraguppe","Kasavanahalli","Kasthuri Nagar 2nd Cross","Kasthuri Nagara Cross","Katamanadoddi","Katamnalloor","Katamnallur Gate","Kathriguppe Cross","Kattalepalya","Kattigehalli Cross","Kattigenahalli","Kattu Gollahalli","Kavery Nagar","K.Channasandra","K. Dommasandra","Kebbepalya","Keb Circle","Keb Office","Kembathhalli","Kempadyapanahalli","Kempalinganahalli","Kempalinganapura","Kempa Lingapura Cross","Kempapura Agrahara","Kempathimmanahalli","Kempa Thimmanahalli Cross","Kempegowda Bus Station","Kempegowdanagara Swimming Pool","Kenchanahalli","Kenchanakuppe","Kenchanapalya","Kenchenahalli Gate","Kendriya Vihar Yelahanka","Kenganahalli Cross","Kengeri Bande Mata","Kengeri Bandemata Badavane","Kengeri Bus Stand","Kengeri Bus Station","Kengeri Housing Board Quarters","Kengeri R.W.B.Gate","Kengeri Satelite Town","Kengeri Satellite Town Cross","Kengeri Satellite Town Housing Board Quarters","Kengeri Satellite Townhoysala Nagara","Kengeri Satellite Town Khb Quarters","Kengunte","Kere Choodahalli","Kereguddanahalli","Kethaganahalli","K.G. Halli Police Station","K.G.Lakkenahalli","K.G.Lakkenahalli Cross","Khb Colony","Khb Colony Cross","K.H.B. Quarters","Kirloskar Badawane","Kittaganur","Kittanahalli Palya","K.M.F","Kmf Gate","K.Narayanapura","Kodagalahatti","Kodalipura","Kodandarama Nagara","Kodatha Male","Kodathi","Kodathi Gate","Kodathi Silk Warm Seeds Technology","Kodichikkanahalli","Kodichikkanahalli Cross","Kodichikkanahalli /J.P. Apartment","Kodigehalli","Kodigehalli Canara Bank","Kodigehalli Cross","Kodigehalli Gate","Kodi Manchanahalli","Kodipalya","Kodiyala","Kohira","Kolathur","Kolathur Gate","Kolavarayanahalli","Koli Farm","Kollur","Kolur","Kommagatta","Kommasandra Cross","Konanakunte Cross","Konanakunte New Bank Colony","Konanakunte Soudamini Kalyana Mantapa","Konasandra Cross","Konasandra Darga","Kondappanahalli","Kondashettihalli","Koogur","Koralur","Koramangala 8th Block","Koramangala  8th Block (Rajendranagara)","Koramangala Housing Complex","Koramangala Kendriya Sadana","Kormangala Kalyana Mantapa","Kormangala Water Tank","Koshy 'S Hospital","Kothnur Cross","Kothnur Dinne","Kothnur Dinne Cross","Kothnur Krishna Layout","Kottigepalya","Kotur","Koudenahalli","Kowdenahalli Cross","K.R.Circle","K.R.Circle /Cauvery Bhavan","K.R.Circle / Corporation","Krishananda Nagar","Krishna Garden","Krishnaiahna Doddi","Krishnaiahna Palya","Krishnanandanagara Cross","Krishna Rao Park","Krisnhappa Layout","Krm 80 Ft & 100 Ft.Road","Krm 80 Ft Rd.& 100 Ft.Rd.","Krm. Jn. Of 80 Ftt.& 100 Ft.Rd.","K.R.Puram","K.R.Puram Old Police Station","K.R.Puram Rly Station","K.R.Railway Station","K.R.S.Gowda Layout","Krupanidhi College","Ksfc Layout Cross","Kudugiddanapalya","Kuduregere Colony","Kudusiddanapalya","Kukkanahalli","Kulume Kempanahalli","Kumaraswamy Layout 2nd Stage","Kumaraswamy Layout Cross","Kumaraswamy Layout West","Kumarswamy Layout","Kumbalagunte Cross","Kumbalahalli Gate","Kumbarahalli Cross","Kundalahalli Cross","Kundalahalli Village","Kundana","Kundlahalli Gate","Kuppasiddana Doddi","Kurubarahalli (Jc Nagara)","Kurubarapalya","Kurudu Sonnenahalli","Kuvempu Circle","Kuvempunagar 2nd Phase","Kuvempunagara Btm Layout","K. Vinayakanagara","K. Vinayakanagara Cross","Kyasaraguppe","Laggere","Lakkenahalli","Lakkondahalli","Lakkondahalli Cross","Lakkondanahalli Gate","Lakkuru Circle","Lakshman Rao Nagara","Lakshmidevinagara","Lakshmi Layout","Lakshmi Layout Arakere","Lalbagh Main Gate","Lalbahadur Shastri Nagar","Laxmanrao Nagara","Laxmidevi Nagara Bus Station","Laxminarayanapura","Laxminarayanapura Cross","Laxmipura","Laxmi Sagar","Leprosorium","L.I.C.Colony","Lingadheera Mallasandra","Lingapura","Lingapura Cross","Lingarajapura","Lingarajapuram Khb Colony","Lotte Gollahalli","Lottegollahalli Railway Colony","Lourdh Bai Samudaya Bhavan","Lourdhubhai Kalyana Mantapa","Lpg Cas Company","Machanayakanahalli","Machohalli Cross","Machohalli Gate","Madanayakanahalli","Madapatna","Madapatna Cross","Madappanahalli","Madappanapalya","Madawara Kodipalya","Madhugirihalli","Madhura Nagara","Madhuranagara Hostel","Madhure","Madhure Village","Madiwala(Si Apartment On Ring Road)","Madurai","Magadi Rd 1st Cross","Magadi Road Housing Board Colony Cross","Magadi Road Ist Main","Magadi Road Leprosium","Magadi Road Tolegate","Magadi Road Toll Gate/Prasanna","Magadi Toll Gate","Mahaarani’S College/Cauvery Bhava","Mahadeshwaranagara (Nagarahole Circle)","Mahadeva Kodigehalli","Mahadevapura Cross","Mahalakshmi Layout","Mahalaxmi Layout Ganesha Temple","Mahal Chowdenahalli","Mahanthalingapura","Maharani College /K.R.Circle","Maharani'S/Cauvery Bhavan","Maharini College","Mahesh Medicals","Mahila Seva Samaja","Mahimana Palya","Malagala","Malagala Bus Stand","Malathhalli Cross","Maligondanahali","Mallara Banawadi","Mallasandra (Anjaneya Temple)","Mall.Bus Station","Mallcircle","Malleshara Circle","Malleshwaram 11thcross","Malleshwaram 8th Cross","Malleshwaram 8th Main 8th Cross","Malleshwaram Railway Station","Malleswaram 8th Cross/11th Cross","Malleswaram Bus Station","Mallimakanapura","Mallohalli","Mallohalli Cross","Mallrabanawadi Cross","Mallthhalli Gate","Malur Circle","Malur Cross","Managalu","Manchanabele","Manchanabele Dam Cross","Manchanahalli","Manganahalli","Manipal","Manjunatha Kalyana Mantapa","Manjunatha Nagara Water Tank","Mantanakurchi","Mantapa","Mantapa Cross","Maragondanahalli Cross","Maralakunte","Maranagere","Maranayakanahalli","Marappanapalya","Marasandra","Marasandra Cross","Marasoor","Marathahalli Colony","Marathhalli Ring Road","Maregowdanadoddi Gate","Maregowdanapalya","Marison Factory","Mariyamma Layout","Mariyammana Nagara","Mariyannana Palya","Maroor","Marsoor Cross","Marthalli Bridge","Marthhalli","Marugondla","Maruthinagar","Maruthisevanagar","Masthenahallil","Mata Gate Anjaneyaswamy Temple","Matha Amruthanandamayi College","Matha Amruthanandamayi Mutt","Matha Halli","Mathahalli Cross","Mathikere","Mathikere Layout","Matna Halli","Mattahalli Cross","Mazar Hosahalli","Mazar Hosahalli Cross","Mctc","Meda Agrahara","Meda Agrahara Cross","Medahalli Colony","Medarahalli","Medarahalli Railway Cross","Medi Mallasandra","Meenakshi Layout","Meenaz Nagar","Meera Montessary School","Meesaganahalli","Meg Center","Mei Layout","Mekhri Circe","Mgstatue","M.Hosahalli","Mico Circle","Mico Factory","Mico Factory Naganathapura","Mico Shramajeevi Colony","Milatary Hospital","Military Accounts","Military Accounts Office","Military Diary Farm","Miller Road Canara Bank","Minhaz Nagara","Mini Taj Mahal","Mittaganahalli","Kurubara Karenahalli","M. Karenahalli","M.L.A.Layout","Mm.Industries","Modi Haspital",".Mohamadan Block","Mohammaden Block","Mohan Kumar Nagara","Monotype","Monotype Corporation","Motaganahalli","M.R.College","M.R.V. Bricks Factory","M.Sathyawara","M S Palya","Muddaiahnapalya","Muddamma Garden","Muddanahalli","Muddina Palya","Mukthinaga Temple","Muneshwara Block","Muneshwaranagara Kere Kodi","Muneshwara Temple","Munikondappa Badavane","Muni Nagara","Munireddy Layout Cross","Muniswamappa Layout","Munnekolalu","Munnekolalu Cross","Muthanallur Cross","Muthasandra","Muthkoor","Muthurayana Gudi Palya","Muthurayanapura Cross","Muthurayaswami Temple","Muthyalanagar","Mutkur Cross","Muttugadahalli","Mylanahalli Cross","Mylanahalli Gate","Mylappanahalli Cross","Naduvathi","Naduvathi Colony","Nagadasanahalli","Nagadevanahalli Rajarajeshwari Layout","Naganayakana Kote","Naganayakankote Cross","Nagaondanahalli","Nagarabhavi 10th Block","Nagarabhavi 1st Stage 3rd Block","Nagarabhavi 2nd Block","Nagarabhavi 2nd Phase 7th Block (Ravy Gym)","Nagarabhavi 2nd Stage 10th Block","Nagarabhavi 9th Block","Nagarabhavi 9th Block Bandemaramma Bus Stand","Nagarabhavi Bda Complex","Nagarabhavi Ist Stage","Nagarbhavi Circle","Nagaresh Nagenahalli","Nagaresh Nagenahalli Dinne","Nagarur Cross","Nagasandra Palya","Nagawarapalya","Nagegowdanapalya Cross","Nagenahalli Cross","Nagenalli Gate","Nagendra Block","Naidu Layout","Nal","Nallakkana Doddi","Nallur","Nallurahalli","Nallur Pura","Nandagudi","Nandini Layout Bus Station","Nanjapura","Narayanaghatta Village","Narayana Hrudayalaya","Narayanakere","Narayanapura Cross","Narayanpura","Navarang Bar","Navya Badavane Gate","Nayanahalli","Nayanappasetty Palya","Nayandahalli Cross","Nayandahalli Railway Gate","Nayandanahalli","Neelasandra Rose Garden","Nekkundi Cross","Nekkundi Dommasandra","Nelaguli Cross","Nelavagilu","Neralur","Neralur Cross","Nesenoor","Nethaji Circle Mathikere","New Byrohalli","New Mico Gate","New Pes College","Ngef","Ngef Factory Gate","Nice Bridge","Nimbekayipura","Ningegowdana Doddi","Nisarga Badavane","Nobel Residence Gate","Nowkalpalya","N.R.Colony","Nrupathunga Nagar","Nrutyagrama Cross","N.T.T.F.","Oasis School","Oil Mill Road And Hennur Rd.Jn.","Old Byapanahalli","Old Byrohalli","Old Gurappanapalya","Om Shakthi Temple(Vijayalakshmi Layout)","Oxford College","Oxford Dental College","Pachepalya Cross","Padmanabha Nagara Circle","Padmanabhanagar Rock","Padmanabhangar","Pallavi","Panathur Dinne","Panathur (Ring Road)","Panatur","Panchasheela Nagar","Pandithana Agrahara","Pantharapalya","Pantharapalya & Ring Road","Papabhovipalya","Papabhovipalya Cross","Papaiahnapalya","Papareddypalya","Parangipalya/Hsr 2nd Sector","Parappana Agrahara Police Training School","Patalappa Layout","Patalappa Layout Cross","Patalappa Layout Gate","Patalappa Layout ( Old Railway Gate)","Patandur Agrahara Cross","Peddanapalya Cross","Peenya 2nd Stage","Periyar Nagara","Periyar Nagar Circle","Pes College","Pettanahalli Gate","Pettenahalli Cross","Picha Guntarahalli","Pillaganahalli","Pillagumpa Industrial Area","Pk Circle","P.K.Circle (Minerva Circle)","Plegent Hotel","Police Housing Corporation","Poojena Agrahara","Poojena Agrahara Cross","Poojenahalli","Poornapragna Layout","Poornima Talkies","Poornima Talkies/Corporation","Poultary Farm","Prakashnagar Shakthi Ganapathi Temple","Prasanna","Prasanna Magadi Road Toll Gate","Prasanna Talkies","Promod Layout.","Pungumaranahalli","Punjab National Bank Layout (Konanakunte)","Punugumaranahalli Cross","Pura","Puradapalya","Puradapalya Cross","Puramanahalli","Puttaiahnapalya","Puttaiahnapalya Cross","Puttenahalli","Ragavendra Colony","Raghuvanahalli Cross","Raghvendra Dhama","Ragi Halli","Railway Bridge","Railway Gate","Railway Under Bridge","Rajagopalanagar Police Station","Rajagopal Nagar","Rajagopalnagara Rajani Farm","Rajajinagar 1st Block","Rajajinagar 6th Block","Rajajinagara Eph On Chord Rd.","Rajajinagara Ram Mandir","Rajajinagar Esi","Rajajinagar Esi Hospital/Shivanagar","Rajajinagar Industrial Town","Rajajinagra Eph","Rajamahal Vilas 2nd Stage","Rajbhavan","Rajmahal Guttahalli","Ramadevanahalli","Ramagiri Cross","Ramaiah Estate","Ramakrishna Hegde Nagar","Ramamurthy Nagar Police Station","Ramanayakana Doddi","Ramanayakanahlli","Ramasagar","Ramohalli","Ramohalli Cross","Rampura","Ranvindra Nagar Cross","Ravagodlu Cross","Ravindra Nagar","Ravuthanahalli Cross","Rayara Doddi Cross","Razakpalya","Red Danish Farm","Rehamth Nagara","Rjn 1st Block","Rjneph On Chord Road","Rjr. Industrial Estate","R.K. Hegadenagar Cross","R.K.Hegde Nagar","R M Guttahalli","Rmv 2nd Stage","Rock (Colony)","R.T.Nagara","R.T.Nagar Police Station","R.V.College","R.V.Engineering College","Sacred Heart Church","Sadahalli","Sadahalli Cross","Sadahalli Gate","Sadananda Nagara","Sadanandanagara 4th Main Water Tank","Sadananda Nagara Water Tank","Sadashivanagar Police Staion","Sadashivnagar Bashyam Circle","Sadashivnagar P.Stn.","Sahakaranagar Bus Station","Sahakaranagar Cross","Sahakaranagar Post Office","Sai Garden","Sakalawara","Samandur","Samethnahalli","Sampige Nagar","Sanjeevini Nagar","Saraswathi Nagara (Bapuji Layout)","Sarjapura","Sarswathinagar Cross","Sarswathingara","Sathanoor","Sathya Sai Baba Hospital","Sathyasai Hospital","Savanadurga","Sdn Police Station / Cpri Gate","Seegehalli","Seegehalli Cross","Seenivagilu","Seetanahalli Cross","Seethakempanahalli","Seetharama B.Palya","Settarahalli Cross","Sevanayakana Doddi","Shakthi Resorts","Shampura","Shani Mahatma Temple","Shankar Nagara","Shankarnag Bus Stand","Shankarnag Nagara  Bus Station","Shanthi Layout","Shanthinagar","Shanthinagar Bus Terminus","Shanthinikethan Layout","Shanthipura","Shanthi Talkies","Shanubhoganahalli Gate","Shanuboganahalli","Shanumangala","Sharavathi Hotel","Shastri Palya","Shathinagar Bus Station","Sheshadri Nagara","Sheshadripuram Police Station","Sheshadripuram P.S.","Sheshagiripura","Shetty Gowdana Doddi","Shikaripalya Cross","Shiva Ittege Factory","Shivajinagar","Shivajingar Bus Station","Shivanagar","Shivanahalli (Esi)","Shivananda Stores","Shivanapalya","Shivanapalya(Jnanabharathi Bda Layout)","Shivanapura","Shivanapura Cross","Shivanapura Gate","Shivasandra","Shripathihalli","Siddabhovi Palya","Siddaganga College","Siddaganga High School","Siddaganga School","Siddana Hosahalli","Sidedahalli","Siluvepura","Singahalli","Singanayakanahalli","Singena Agrahara","Singena Agrahara Cross","Singena Agrahara Cross Fruit Market","Sipayanahalli Cross","Soladevanahalli Keb Office","Soladevanahalli Police Station","Sollepura","Somalapura","Somashettahalli","Somasundar Palya","Somathahalli Gate","Sompura Gate","Sonnadevanahalli Cross","Sonnahallipura","Sonnenahalli","Sonnenahalli Cross","Sonnenahalli Hospital","Soolivara Cross","Soppahalli","Sora Hunise","Sothegowdanahalli","Soudhamini Kalyana Mantapa","Soukya Hospital","South City Gate","Sports Authority Of India","Sreeramanahalli Cross","Sri Bigini Restaurant","Srigandhada Kaval","Srigandhada Kaval D'Group Employees Layout","Srinagara Bus Station","Srinidhi Layout (Maruthi School)","Srinigara","Srinivasanagar","Srinivasa Nagar (Boda Bande Anjaneya Temple)","Srinivasapura Cross","Srirama Nagara","Sri Rama Temple","Srirampura","Srirampura Bashyam Nagara","Sri Venkateshwaranagar Layout 4th Cross","Srividya Nagar (Bsk 3rd Stage 2nd Phase)","S.R.Puram Gandhi School","State Bank Of India","St.Mary'S School","Subbaiahnapalya","Subbarayappanapalya Cross","Sudduguntepalya Cross","Sugganahalli","Sulakunte Dinne","Sulibele","Suliwara","Sultanpalya Cross","Sunshine Children School","Sunshine School","Suradenapura","Suradenapura Cross","Suradevapura Cross","Suraga Jakkanahalli","Suryodaya Mill","Swatantrayodara Nagara","Talaguppe","Talegere","Tambuchettypalya","Tankbund","Tarabanahalli Cross","Tarabanahallli","Tarahunise","Tataguni","Tata Nagar","Tattanur","Tattekere","Taverekere","Taxi Stand","T.Dasarahalli","Teachers Colony","Telecom Colony","Telecom Layout","Telecom Layout 3rd Cross","Tele Communication Layout","Temple","Temple Main Gate","Thagachakuppe","Thammanayakanhalli","Thammenahalli","Thammenahalli Palya","Thanisandra","Thaniyur","Tharabanahalli","Tharalu","Tharalu Estate","Thathguni","Thathanuru","Thattaguppe","Thattanahalli","Thigalara Chowdenahalli","Thigalarapalya","Thimmabhovipalya","Thimmaiah Garden","Thimmappanapalya","Thimmasandra Cross","Thimmegowdana Doddi","Thindlu","Thindlu Cross","Thindlu Gate","Thippagondanahalli","Thippagondanahalli Cross","Thippagondanahalli Quarters","Thippasandra","Thippasandra Cross","Thippenahalli","Thippenahalli Anjaneya Temple","Thippur","Thirmagondanahalli Gate","Thirumagondahalli Cross","Thirumalapura","Thirumashettyhalli Cross","Thirumenahalli","Thirumenahalli Cross","Thirupalya","Thiruva Ranga","Thittahalli","Thogur Cross","Thokathimmana Doddi","Thokathimmana Doddi Cross","Thonachaguppe","Thoredoddi","Thore Nagasandra","Thotada Guddahalli","Thotagere Temple","Thunganagara","Thyagadahalli","Thyagarajanagara","Thyagarajanagara Bsk 2nd Stage","Thyamagondlu","Timberyard Layout","Tollgate","Tulasipura","Tulip Resorts","Udaya Nagara","Udayanapalya","Uddandanahalli","Uganawadi","Ullalu","Ullalu Satellite Town","Upkar Residency Layout","Uragana Doddi","Uttanahalli","Uttanahalli Colony (Akkayammana Betta)","Uttanahalli Cross","Uttanahalli Janatha Colony","Vabasandra","Vabasandra Cross","Vaddarahalli","Vaddarpalya","Vaderahallli","Vadera Manchenahalli","Vagata","Vajragiri Estate","Vajrakatte Palya","Vajramuneshwara Temple","Valagere Kallahalli","Valagere Kallahalli Cross","Valepura","Valepura Cross","Vapsandra","Varadenahalli Hand Post","Varanasi","Varthur High School","Vartur","Vartur Kodi","Vasanthanagara Csi","Vasanthanagara Temple","Vasanthapura Co-Operative Society","Vasanthapura Co-Op.Society","Vasanthnagar","Veerabhadranagara","Veerabhadranagara Cross","Veeranjanapura","Veeranjaneya Temple","Veerannanapalya","Veeranna Palya Gate","Veerasagara","Veeregowdana Doddi","Venkateshwara Nagara","Venkateshwara Nagar Cross","Veternary Hospital","Vibhuthipura Samudaya Bhavan","Vidhana Soudha Layout","Vidyanagara Cross","Vidyanagara","Vidyaniketan Public School","Vidyaranyapura Cross","Vigneshwaranagara","Vijanagara","Vijaya Bank Apartment","Vijaya Bank Colony","Vijaya College","Vijaya Enclave Appartment","Vijayanagar","Vijayanagara Income Tax Layout","Vijayanagara Maruthi Mandira","Vijaya Rice Mill","Vijinapura Cross","Vinayak Nagar","Vinayaka Talkies  Mysore Road","Viratnagara","Vishveshwaraiah College","Vishveshwaraiah Enclave","Vishwanatha Nagenahali","Vishwanathapura","Vivekanandanagara","Viveknagar","Viveknagara Cross","Vrl Office","Vydehi Institute Of Medical Research Hospital","Vydehi Medical Hospital","Vydehi Medical  Science And Reserch Hospital","Water Tank","Whitefield Post Office","White Field Railway Station","Wilson Garden 7th Cross","Wilson Garden Police Station","Yadagondanahalli","Yadalu","Yadavanahalli Gate","Yalagunte","Yamalur Cross","Yamare","Yaranadhalli","Yarappanahalli Bande","Yedavanahalli Cross","Yelachaguppe","Yelachanakuppe","Yelachenahalli","Yelahanka Nes Office","Yelahanka New Town 5th Phase","Yelahanka Santhe","Yelahanka Satellite Town 4th Phase","Yelahanka Satellite Town 5th Phase","Yelahanka Satllite Town","Yele  Kodigehalli","Yelenahalli","Yellammana Doddi","Yellappa Reddy House","Yellukunte Mangammanapalya","Yemalur","Yeshawanthapura  Railway Station (On Tmk Road)","Yeshwanthapura Bus Stn","Yeshwanthpur","Yeshwanthpura Railway Station","Yeshwanthpur Circle","Yeshwanthpur Regulated Market","Yeshwantpur Toll Gate","Yettukodi","Yhk Satellite Town","Ymca Nandidurga Road","Yogeshwara Nagara"," Banashankari"," Jayanagara 5th Block"," Jayanagara 9th Block East"," Jeevanahalli"," Jn.Of Chord Road Bcc Layout Cross"," Krishnananda Nagara"," Kuvempunagara (Btm Lay Out)","Agara","Agrahara Cross","Alur Palya","Ambedkar Bhavan","Andrahalli Vidyamanya Nagara","Annapurneshwari Nagara Cross","Arabic College","Arakere Gate","Anugondanahalli","Arehalli","Audugodi Check Post","Avverahalli","Ayyappanagar Muneshwara Temple","Avinash Petrol Bunk","Bagalagunte","Balagangadharanatha Swamy Health City","Banasawadi","Bande Bommasandra Cross","Bangalore University Cross","Mayasandra(Mysore Road)","Laxmipura(Mysore Road)","Gollahalli(Tavarakere)","Chikkanahalli(M.Road)","Cholanaikanahalli","kaggalahalli","Agara","Agara.kan","Mariyappana Palya.Ring Road","Kenchanapura.Magadi","Gollarahatti.Magadi","Peddanpalya.Magdi","Gankal.Magadi","Varthur.M","Mallasandra.M","Anchepalya.Tumakur","Achyuthanagara.Hesarghatta","Rajankunte","Linganahalli.Rajankunte","Guddhalli.Hesarghatta","Gopalpura.Hesarghatta","Kodipalya.Hesaghatta","Kodihalli.hesarghtta ","Kempapura.hesarghatta","Betthankere.thumkur Road","Govindh Pura.Thumkur","Binnamanagala.Nelamangala","Mahadev Pura.kunigal","Hunnigere.Kunigal","Chikkanahalli.Madhure Road","Kannamangala.Tumkur","ByrasandRa.Tumkur","Tavarakere.B.T.M","Kadhirenahalli.Tumkur","Laximipura.HGV","Koli Form. HGV","Vinayaka Nagara.Hgv","Alisda.tumkur","Maruthinagar.Blry Rd","Agrahara Layout.Yhk","Adoor.Blyr","Rampura.hsk","Kothnur.Bgr","Geddalahalli.bgr","Kyalasanahalli.bgr","Marenahalli.bgr","Chokkanahalli.bgr","Mailnahalli.bgr","Begur.Blyr","Gollarahalli.ect","Huskur.Ect","Laximisagara.Ect","Somanahalli.Ect","Hosahalli.Ect","Madapatna.Jegani","Mayasanadra.CPR","Attibele.HSR","Manchenahalli.Attibele","Arehalli.ATB","Chikkanahalli.ATB","Narsapura.ATB","Dasanpura.ATB","Siddapura.Varthur","Ashwath Nagara.Mrh","Kudhrgere.Bgr","Narayanpura.Blyr","Puttenahalli.dbp","Thimmasandra.DBP","Harohalli.DBP","Gantaganahalli.DBP","Ramgondanahalli.DBP","Basavanpura.DBP","Marasandra.DBP","Sonnenahalli.DBP","Dasarahalli.JKR","Amruthnagar.yhk","Thindlu.JKR","Kodigehalli.Yhk","Gopalpura.Bgr","Kammasandra.BGR","Avalahallli.HSK","Mylanhalli.BGR","Thimmanahalli.BGR","Shrirampura.YHK","Yarappanahalli.BGR","Hegganahalli.DVH","Jn.of Ring Road (Ram murthi)","Devasandra.KRP","Kodigehalli.KRP","Channnasandra.KRP","Channasandra.WFR","Basavanahalli.KRP","Kodihalli.WFR","Handhenahalli.WFR","Thindlu.WFR","HOsahalli.WFR","Tarabanahalli.WFR","Medhalli.WFR","Marasandra.WFR","Shrinivaspura Cross.HSk","A Narayanpura.KRP","Maragonadanahalli.KRP","Basavanagar.RMN","Seegehalli.KRP","Thirumanahalli Cross.HSK","Huskur.HSK","Handhenahalli.KRP","Kannnamangala.HSK","Sonnenahalli.HSK","Kurubarahalli.HSK","Begur.HSK","Govindhpura.HSK","Kannmangala. Cross.HSK","Seegehalli.KDG","Dinnnur.KGB","Harohalli.KGB","Muthugadahalli.WFR","Thipppasandra.WFR","Kathriguppe.WFR","Vijaynagar.WFR","Ayyappa Temple.KRP","Sompura.SJR","Madappanahalli.WFR","Kottur.WFR","Nagasandra.HAL","Thindlu.SJR","Gundur.SJR","Thindlu Cross.SJR","Kammasandra.SJR","Medhalli.ATB","Vaddarapalya.Jegani","Kalkere.BNG","Y.T.Hospitol.BNP","Konasandra.BNP","Ramasandra.BNP","Laximipura.GNP","Adur.BNP","Chikknahalli.BNP","Kumbarahalli.BNP","Siddanpalya.BNP","Shrinivaspura.KGR","Harlur.HSK","Harlur CRoss.HSK","Solur.HSK","Kamblipura.HSK","Vabsandra.HSK","Shivanpura.HSK","Chikkanahalli.HSK","Kempalinganpura.HSK","Thavarakere.HSK","Anchipura.MYR","Marenahalli.VJN","Gangondanahalli.VJN","Binnypete","Kaverinagara.RJN","KHB Colony.MYs","Lakshmi Sagara.MYS","Anchupura.Cross.MYR","Sompura.Kanak","Mallathhalli.MYR","Byrmangala Cross.MYR","Hosahalli.MYR","Gonipura.MYR","Mallathalli.Bidadhi","GAnkal.Bidadhi","Anjana Nagara.MGD","Gollarpalya.MGd","Maragondanahalli.MGD","Giddenahalli.MGD","Hosapalya.MYR","Rampura.MGD","Kaggalhalli.MGD","Gollahalli.MGD","Marenahalli.MGD","Gollahalli.KAN","Allalsandra.KAN","Avalahalli.KAN","Ganpathipura.KAN","Thavarakere.BDC","Arakere.HSG","Kogilu Cross (Yelahanka)","Windsor Manor","Hotel Leela Palace","St. Johns Hospital","Brigade Road","Lalbagh North Gate","Minsk Square/BRV Parade Grounds","Electronics City Wipro gate","Jayanagar 3rd Block (Syndicate Bank)","Jayanagar 3rd Block (BATA)","Forum (Hosur Rd)","Madiwala checkpost (Big Bazar)","Electronics City 2nd Phase","ITPL","Kalyani Magnum (JPNR)","Maharani College","RV Dental college (JPNR)","Delmia Signal (JPNR 3rd Phase)","Brigade Millenium (JPNR 7th Ph)"];

AJS={BASE_URL:"",drag_obj:null,drag_elm:null,_drop_zones:[],_cur_pos:null,getScrollTop:function(){
var t;
if(document.documentElement&&document.documentElement.scrollTop){
t=document.documentElement.scrollTop;
}else{
if(document.body){
t=document.body.scrollTop;
}
}
return t;
},addClass:function(){
var _2=AJS.forceArray(arguments);
var _3=_2.pop();
var _4=function(o){
if(!new RegExp("(^|\\s)"+_3+"(\\s|$)").test(o.className)){
o.className+=(o.className?" ":"")+_3;
}
};
AJS.map(_2,function(_6){
_4(_6);
});
},setStyle:function(){
var _7=AJS.forceArray(arguments);
var _8=_7.pop();
var _9=_7.pop();
AJS.map(_7,function(_a){
_a.style[_9]=AJS.getCssDim(_8);
});
},extend:function(_b){
var _c=new this("no_init");
for(k in _b){
var _d=_c[k];
var _e=_b[k];
if(_d&&_d!=_e&&typeof _e=="function"){
_e=this._parentize(_e,_d);
}
_c[k]=_e;
}
return new AJS.Class(_c);
},log:function(o){
if(window.console){
console.log(o);
}else{
var div=AJS.$("ajs_logger");
if(!div){
div=AJS.DIV({id:"ajs_logger","style":"color: green; position: absolute; left: 0"});
div.style.top=AJS.getScrollTop()+"px";
AJS.ACN(AJS.getBody(),div);
}
AJS.setHTML(div,""+o);
}
},setHeight:function(){
var _11=AJS.forceArray(arguments);
_11.splice(_11.length-1,0,"height");
AJS.setStyle.apply(null,_11);
},_getRealScope:function(fn,_13){
_13=AJS.$A(_13);
var _14=fn._cscope||window;
return function(){
var _15=AJS.$FA(arguments).concat(_13);
return fn.apply(_14,_15);
};
},documentInsert:function(elm){
if(typeof (elm)=="string"){
elm=AJS.HTML2DOM(elm);
}
document.write("<span id=\"dummy_holder\"></span>");
AJS.swapDOM(AJS.$("dummy_holder"),elm);
},getWindowSize:function(doc){
doc=doc||document;
var _18,_19;
if(self.innerHeight){
_18=self.innerWidth;
_19=self.innerHeight;
}else{
if(doc.documentElement&&doc.documentElement.clientHeight){
_18=doc.documentElement.clientWidth;
_19=doc.documentElement.clientHeight;
}else{
if(doc.body){
_18=doc.body.clientWidth;
_19=doc.body.clientHeight;
}
}
}
return {"w":_18,"h":_19};
},flattenList:function(_1a){
var r=[];
var _1c=function(r,l){
AJS.map(l,function(o){
if(o==null){
}else{
if(AJS.isArray(o)){
_1c(r,o);
}else{
r.push(o);
}
}
});
};
_1c(r,_1a);
return r;
},isFunction:function(obj){
return (typeof obj=="function");
},setEventKey:function(e){
e.key=e.keyCode?e.keyCode:e.charCode;
if(window.event){
e.ctrl=window.event.ctrlKey;
e.shift=window.event.shiftKey;
}else{
e.ctrl=e.ctrlKey;
e.shift=e.shiftKey;
}
switch(e.key){
case 63232:
e.key=38;
break;
case 63233:
e.key=40;
break;
case 63235:
e.key=39;
break;
case 63234:
e.key=37;
break;
}
},removeElement:function(){
var _22=AJS.forceArray(arguments);
AJS.map(_22,function(elm){
AJS.swapDOM(elm,null);
});
},_unloadListeners:function(){
if(AJS.listeners){
AJS.map(AJS.listeners,function(elm,_25,fn){
AJS.REV(elm,_25,fn);
});
}
AJS.listeners=[];
},join:function(_27,_28){
try{
return _28.join(_27);
}
catch(e){
var r=_28[0]||"";
AJS.map(_28,function(elm){
r+=_27+elm;
},1);
return r+"";
}
},getIndex:function(elm,_2c,_2d){
for(var i=0;i<_2c.length;i++){
if(_2d&&_2d(_2c[i])||elm==_2c[i]){
return i;
}
}
return -1;
},isIn:function(elm,_30){
var i=AJS.getIndex(elm,_30);
if(i!=-1){
return true;
}else{
return false;
}
},isArray:function(obj){
return obj instanceof Array;
},setLeft:function(){
var _33=AJS.forceArray(arguments);
_33.splice(_33.length-1,0,"left");
AJS.setStyle.apply(null,_33);
},appendChildNodes:function(elm){
if(arguments.length>=2){
AJS.map(arguments,function(n){
if(AJS.isString(n)){
n=AJS.TN(n);
}
if(AJS.isDefined(n)){
elm.appendChild(n);
}
},1);
}
return elm;
},getElementsByTagAndClassName:function(_36,_37,_38,_39){
var _3a=[];
if(!AJS.isDefined(_38)){
_38=document;
}
if(!AJS.isDefined(_36)){
_36="*";
}
var els=_38.getElementsByTagName(_36);
var _3c=els.length;
var _3d=new RegExp("(^|\\s)"+_37+"(\\s|$)");
for(i=0,j=0;i<_3c;i++){
if(_3d.test(els[i].className)||_37==null){
_3a[j]=els[i];
j++;
}
}
if(_39){
return _3a[0];
}else{
return _3a;
}
},isOpera:function(){
return (navigator.userAgent.toLowerCase().indexOf("opera")!=-1);
},isString:function(obj){
return (typeof obj=="string");
},hideElement:function(elm){
var _40=AJS.forceArray(arguments);
AJS.map(_40,function(elm){
elm.style.display="none";
});
},setOpacity:function(elm,p){
elm.style.opacity=p;
elm.style.filter="alpha(opacity="+p*100+")";
},insertBefore:function(elm,_45){
_45.parentNode.insertBefore(elm,_45);
return elm;
},setWidth:function(){
var _46=AJS.forceArray(arguments);
_46.splice(_46.length-1,0,"width");
AJS.setStyle.apply(null,_46);
},createArray:function(v){
if(AJS.isArray(v)&&!AJS.isString(v)){
return v;
}else{
if(!v){
return [];
}else{
return [v];
}
}
},isDict:function(o){
var _49=String(o);
return _49.indexOf(" Object")!=-1;
},isMozilla:function(){
return (navigator.userAgent.toLowerCase().indexOf("gecko")!=-1&&navigator.productSub>=20030210);
},removeEventListener:function(elm,_4b,fn,_4d){
var _4e="ajsl_"+_4b+fn;
if(!_4d){
_4d=false;
}
fn=elm[_4e]||fn;
if(elm["on"+_4b]==fn){
elm["on"+_4b]=elm[_4e+"old"];
}
if(elm.removeEventListener){
elm.removeEventListener(_4b,fn,_4d);
if(AJS.isOpera()){
elm.removeEventListener(_4b,fn,!_4d);
}
}else{
if(elm.detachEvent){
elm.detachEvent("on"+_4b,fn);
}
}
},callLater:function(fn,_50){
var _51=function(){
fn();
};
window.setTimeout(_51,_50);
},setTop:function(){
var _52=AJS.forceArray(arguments);
_52.splice(_52.length-1,0,"top");
AJS.setStyle.apply(null,_52);
},_createDomShortcuts:function(){
var _53=["ul","li","td","tr","th","tbody","table","input","span","b","a","div","img","button","h1","h2","h3","h4","h5","h6","br","textarea","form","p","select","option","optgroup","iframe","script","center","dl","dt","dd","small","pre","i"];
var _54=function(elm){
AJS[elm.toUpperCase()]=function(){
return AJS.createDOM.apply(null,[elm,arguments]);
};
};
AJS.map(_53,_54);
AJS.TN=function(_56){
return document.createTextNode(_56);
};
},addCallback:function(fn){
this.callbacks.unshift(fn);
},bindMethods:function(_58){
for(var k in _58){
var _5a=_58[k];
if(typeof (_5a)=="function"){
_58[k]=AJS.$b(_5a,_58);
}
}
},partial:function(fn){
var _5c=AJS.$FA(arguments);
_5c.shift();
return function(){
_5c=_5c.concat(AJS.$FA(arguments));
return fn.apply(window,_5c);
};
},isNumber:function(obj){
return (typeof obj=="number");
},getCssDim:function(dim){
if(AJS.isString(dim)){
return dim;
}else{
return dim+"px";
}
},isIe:function(){
return (navigator.userAgent.toLowerCase().indexOf("msie")!=-1&&navigator.userAgent.toLowerCase().indexOf("opera")==-1);
},removeClass:function(){
var _5f=AJS.forceArray(arguments);
var cls=_5f.pop();
var _61=function(o){
o.className=o.className.replace(new RegExp("\\s?"+cls,"g"),"");
};
AJS.map(_5f,function(elm){
_61(elm);
});
},setHTML:function(elm,_65){
elm.innerHTML=_65;
return elm;
},map:function(_66,fn,_68,_69){
var i=0,l=_66.length;
if(_68){
i=_68;
}
if(_69){
l=_69;
}
for(i;i<l;i++){
var val=fn(_66[i],i);
if(val!=undefined){
return val;
}
}
},addEventListener:function(elm,_6e,fn,_70,_71){
var _72="ajsl_"+_6e+fn;
if(!_71){
_71=false;
}
AJS.listeners=AJS.$A(AJS.listeners);
if(AJS.isIn(_6e,["keypress","keydown","keyup","click"])){
var _73=fn;
fn=function(e){
AJS.setEventKey(e);
return _73.apply(window,arguments);
};
}
var _75=AJS.isIn(_6e,["submit","load","scroll","resize"]);
var _76=AJS.$A(elm);
AJS.map(_76,function(_77){
if(_70){
var _78=fn;
fn=function(e){
AJS.REV(_77,_6e,fn);
return _78.apply(window,arguments);
};
}
if(_75){
var _7a=_77["on"+_6e];
var _7b=function(){
if(_7a){
fn(arguments);
return _7a(arguments);
}else{
return fn(arguments);
}
};
_77[_72]=_7b;
_77[_72+"old"]=_7a;
elm["on"+_6e]=_7b;
}else{
_77[_72]=fn;
if(_77.attachEvent){
_77.attachEvent("on"+_6e,fn);
}else{
if(_77.addEventListener){
_77.addEventListener(_6e,fn,_71);
}
}
AJS.listeners.push([_77,_6e,fn]);
}
});
},preloadImages:function(){
AJS.AEV(window,"load",AJS.$p(function(_7c){
AJS.map(_7c,function(src){
var pic=new Image();
pic.src=src;
});
},arguments));
},forceArray:function(_7f){
var r=[];
AJS.map(_7f,function(elm){
r.push(elm);
});
return r;
},update:function(l1,l2){
for(var i in l2){
l1[i]=l2[i];
}
return l1;
},getBody:function(){
return AJS.$bytc("body")[0];
},HTML2DOM:function(_85,_86){
var d=AJS.DIV();
d.innerHTML=_85;
if(_86){
return d.childNodes[0];
}else{
return d;
}
},getElement:function(id){
if(AJS.isString(id)||AJS.isNumber(id)){
return document.getElementById(id);
}else{
return id;
}
},showElement:function(){
var _89=AJS.forceArray(arguments);
AJS.map(_89,function(elm){
elm.style.display="";
});
},bind:function(fn,_8c,_8d){
fn._cscope=_8c;
return AJS._getRealScope(fn,_8d);
},createDOM:function(_8e,_8f){
var i=0,_91;
var elm=document.createElement(_8e);
var _93=_8f[0];
if(AJS.isDict(_8f[i])){
for(k in _93){
_91=_93[k];
if(k=="style"||k=="s"){
elm.style.cssText=_91;
}else{
if(k=="c"||k=="class"||k=="className"){
elm.className=_91;
}else{
elm.setAttribute(k,_91);
}
}
}
i++;
}
if(_93==null){
i=1;
}
for(var j=i;j<_8f.length;j++){
var _91=_8f[j];
if(_91){
var _95=typeof (_91);
if(_95=="string"||_95=="number"){
_91=AJS.TN(_91);
}
elm.appendChild(_91);
}
}
return elm;
},swapDOM:function(_96,src){
_96=AJS.getElement(_96);
var _98=_96.parentNode;
if(src){
src=AJS.getElement(src);
_98.replaceChild(src,_96);
}else{
_98.removeChild(_96);
}
return src;
},isDefined:function(o){
return (o!="undefined"&&o!=null);
}};
AJS.$=AJS.getElement;
AJS.$$=AJS.getElements;
AJS.$f=AJS.getFormElement;
AJS.$p=AJS.partial;
AJS.$b=AJS.bind;
AJS.$A=AJS.createArray;
AJS.DI=AJS.documentInsert;
AJS.ACN=AJS.appendChildNodes;
AJS.RCN=AJS.replaceChildNodes;
AJS.AEV=AJS.addEventListener;
AJS.REV=AJS.removeEventListener;
AJS.$bytc=AJS.getElementsByTagAndClassName;
AJS.$AP=AJS.absolutePosition;
AJS.$FA=AJS.forceArray;
AJS.addEventListener(window,"unload",AJS._unloadListeners);
AJS._createDomShortcuts();
AJS.Class=function(_9a){
var fn=function(){
if(arguments[0]!="no_init"){
return this.init.apply(this,arguments);
}
};
fn.prototype=_9a;
AJS.update(fn,AJS.Class.prototype);
return fn;
};
AJS.Class.prototype={extend:function(_9c){
var _9d=new this("no_init");
for(k in _9c){
var _9e=_9d[k];
var cur=_9c[k];
if(_9e&&_9e!=cur&&typeof cur=="function"){
cur=this._parentize(cur,_9e);
}
_9d[k]=cur;
}
return new AJS.Class(_9d);
},implement:function(_a0){
AJS.update(this.prototype,_a0);
},_parentize:function(cur,_a2){
return function(){
this.parent=_a2;
return cur.apply(this,arguments);
};
}};
script_loaded=true;


script_loaded=true;

AJS.fx={_shades:{0:"ffffff",1:"ffffee",2:"ffffdd",3:"ffffcc",4:"ffffbb",5:"ffffaa",6:"ffff99"},highlight:function(_1,_2){
var _3=new AJS.fx.Base();
_3.elm=AJS.$(_1);
_3.options.duration=600;
_3.setOptions(_2);
AJS.update(_3,{increase:function(){
if(this.now==7){
_1.style.backgroundColor="#fff";
}else{
_1.style.backgroundColor="#"+AJS.fx._shades[Math.floor(this.now)];
}
}});
return _3.custom(6,0);
},fadeIn:function(_4,_5){
_5=_5||{};
if(!_5.from){
_5.from=0;
AJS.setOpacity(_4,0);
}
if(!_5.to){
_5.to=1;
}
var s=new AJS.fx.Style(_4,"opacity",_5);
return s.custom(_5.from,_5.to);
},fadeOut:function(_7,_8){
_8=_8||{};
if(!_8.from){
_8.from=1;
}
if(!_8.to){
_8.to=0;
}
_8.duration=300;
var s=new AJS.fx.Style(_7,"opacity",_8);
return s.custom(_8.from,_8.to);
},setWidth:function(_a,_b){
var s=new AJS.fx.Style(_a,"width",_b);
return s.custom(_b.from,_b.to);
},setHeight:function(_d,_e){
var s=new AJS.fx.Style(_d,"height",_e);
return s.custom(_e.from,_e.to);
}};
AJS.fx.Base=new AJS.Class({init:function(_10){
this.options={onStart:function(){
},onComplete:function(){
},transition:AJS.fx.Transitions.sineInOut,duration:500,wait:true,fps:50};
AJS.update(this.options,_10);
AJS.bindMethods(this);
},setOptions:function(_11){
AJS.update(this.options,_11);
},step:function(){
var _12=new Date().getTime();
if(_12<this.time+this.options.duration){
this.cTime=_12-this.time;
this.setNow();
}else{
setTimeout(AJS.$b(this.options.onComplete,this,[this.elm]),10);
this.clearTimer();
this.now=this.to;
}
this.increase();
},setNow:function(){
this.now=this.compute(this.from,this.to);
},compute:function(_13,to){
var _15=to-_13;
return this.options.transition(this.cTime,_13,_15,this.options.duration);
},clearTimer:function(){
clearInterval(this.timer);
this.timer=null;
return this;
},_start:function(_16,to){
if(!this.options.wait){
this.clearTimer();
}
if(this.timer){
return;
}
setTimeout(AJS.$p(this.options.onStart,this.elm),10);
this.from=_16;
this.to=to;
this.time=new Date().getTime();
this.timer=setInterval(this.step,Math.round(1000/this.options.fps));
return this;
},custom:function(_18,to){
return this._start(_18,to);
},set:function(to){
this.now=to;
this.increase();
return this;
},setStyle:function(elm,_1c,val){
if(this.property=="opacity"){
AJS.setOpacity(elm,val);
}else{
AJS.setStyle(elm,_1c,val);
}
}});
AJS.fx.Style=AJS.fx.Base.extend({init:function(elm,_1f,_20){
this.parent();
this.elm=elm;
this.setOptions(_20);
this.property=_1f;
},increase:function(){
this.setStyle(this.elm,this.property,this.now);
}});
AJS.fx.Styles=AJS.fx.Base.extend({init:function(elm,_22){
this.parent();
this.elm=AJS.$(elm);
this.setOptions(_22);
this.now={};
},setNow:function(){
for(p in this.from){
this.now[p]=this.compute(this.from[p],this.to[p]);
}
},custom:function(obj){
if(this.timer&&this.options.wait){
return;
}
var _24={};
var to={};
for(p in obj){
_24[p]=obj[p][0];
to[p]=obj[p][1];
}
return this._start(_24,to);
},increase:function(){
for(var p in this.now){
this.setStyle(this.elm,p,this.now[p]);
}
}});
AJS.fx.Transitions={linear:function(t,b,c,d){
return c*t/d+b;
},sineInOut:function(t,b,c,d){
return -c/2*(Math.cos(Math.PI*t/d)-1)+b;
}};
script_loaded=true;


script_loaded=true;

var GB_CURRENT=null;
GB_hide=function(cb){
GB_CURRENT.hide(cb);
};
GreyBox=new AJS.Class({init:function(_2){
this.use_fx=AJS.fx;
this.type="page";
this.overlay_click_close=false;
this.salt=0;
this.root_dir=GB_ROOT_DIR;
this.callback_fns=[];
this.reload_on_close=false;
this.src_loader=this.root_dir+"loader_frame.html";
var _3=window.location.hostname.indexOf("www");
var _4=this.src_loader.indexOf("www");
if(_3!=-1&&_4==-1){
this.src_loader=this.src_loader.replace("://","://www.");
}
if(_3==-1&&_4!=-1){
this.src_loader=this.src_loader.replace("://www.","://");
}
this.show_loading=true;
AJS.update(this,_2);
},addCallback:function(fn){
if(fn){
this.callback_fns.push(fn);
}
},show:function(_6){
GB_CURRENT=this;
this.url=_6;
var _7=[AJS.$bytc("object"),AJS.$bytc("select")];
AJS.map(AJS.flattenList(_7),function(_8){
_8.style.visibility="hidden";
});
this.createElements();
return false;
},hide:function(cb){
var me=this;
AJS.callLater(function(){
var _b=me.callback_fns;
if(_b!=[]){
AJS.map(_b,function(fn){
fn();
});
}
me.onHide();
if(me.use_fx){
var _d=me.overlay;
AJS.fx.fadeOut(me.overlay,{onComplete:function(){
AJS.removeElement(_d);
_d=null;
},duration:300});
AJS.removeElement(me.g_window);
}else{
AJS.removeElement(me.g_window,me.overlay);
}
me.removeFrame();
AJS.REV(window,"scroll",_GB_setOverlayDimension);
AJS.REV(window,"resize",_GB_update);
var _e=[AJS.$bytc("object"),AJS.$bytc("select")];
AJS.map(AJS.flattenList(_e),function(_f){
_f.style.visibility="visible";
});
GB_CURRENT=null;
if(me.reload_on_close){
window.location.reload();
}
if(AJS.isFunction(cb)){
cb();
}
},10);
},update:function(){
this.setOverlayDimension();
this.setFrameSize();
this.setWindowPosition();
},createElements:function(){
this.initOverlay();
this.g_window=AJS.DIV({"id":"GB_window"});
AJS.hideElement(this.g_window);
AJS.getBody().insertBefore(this.g_window,this.overlay.nextSibling);
this.initFrame();
this.initHook();
this.update();
var me=this;
if(this.use_fx){
AJS.fx.fadeIn(this.overlay,{duration:300,to:0.7,onComplete:function(){
me.onShow();
AJS.showElement(me.g_window);
me.startLoading();
}});
}else{
AJS.setOpacity(this.overlay,0.7);
AJS.showElement(this.g_window);
this.onShow();
this.startLoading();
}
AJS.AEV(window,"scroll",_GB_setOverlayDimension);
AJS.AEV(window,"resize",_GB_update);
},removeFrame:function(){
try{
AJS.removeElement(this.iframe);
}
catch(e){
}
this.iframe=null;
},startLoading:function(){
this.iframe.src=this.src_loader+"?s="+this.salt++;
AJS.showElement(this.iframe);
},setOverlayDimension:function(){
var _11=AJS.getWindowSize();
if(AJS.isMozilla()||AJS.isOpera()){
AJS.setWidth(this.overlay,"100%");
}else{
AJS.setWidth(this.overlay,_11.w);
}
var _12=Math.max(AJS.getScrollTop()+_11.h,AJS.getScrollTop()+this.height);
if(_12<AJS.getScrollTop()){
AJS.setHeight(this.overlay,_12);
}else{
AJS.setHeight(this.overlay,AJS.getScrollTop()+_11.h);
}
},initOverlay:function(){
this.overlay=AJS.DIV({"id":"GB_overlay"});
if(this.overlay_click_close){
AJS.AEV(this.overlay,"click",GB_hide);
}
AJS.setOpacity(this.overlay,0);
AJS.getBody().insertBefore(this.overlay,AJS.getBody().firstChild);
},initFrame:function(){
if(!this.iframe){
var d={"name":"GB_frame","class":"GB_frame","frameBorder":0};
if(AJS.isIe()){
d.src="javascript:false;document.write(\"\");";
}
this.iframe=AJS.IFRAME(d);
this.middle_cnt=AJS.DIV({"class":"content"},this.iframe);
this.top_cnt=AJS.DIV();
this.bottom_cnt=AJS.DIV();
AJS.ACN(this.g_window,this.top_cnt,this.middle_cnt,this.bottom_cnt);
}
},onHide:function(){
},onShow:function(){
},setFrameSize:function(){
},setWindowPosition:function(){
},initHook:function(){
}});
_GB_update=function(){
if(GB_CURRENT){
GB_CURRENT.update();
}
};
_GB_setOverlayDimension=function(){
if(GB_CURRENT){
GB_CURRENT.setOverlayDimension();
}
};
AJS.preloadImages(GB_ROOT_DIR+"indicator.gif");
script_loaded=true;
var GB_SETS={};
function decoGreyboxLinks(){
var as=AJS.$bytc("a");
AJS.map(as,function(a){
if(a.getAttribute("href")&&a.getAttribute("rel")){
var rel=a.getAttribute("rel");
if(rel.indexOf("gb_")==0){
var _17=rel.match(/\w+/)[0];
var _18=rel.match(/\[(.*)\]/)[1];
var _19=0;
var _1a={"caption":a.title||"","url":a.href};
if(_17=="gb_pageset"||_17=="gb_imageset"){
if(!GB_SETS[_18]){
GB_SETS[_18]=[];
}
GB_SETS[_18].push(_1a);
_19=GB_SETS[_18].length;
}
if(_17=="gb_pageset"){
a.onclick=function(){
GB_showFullScreenSet(GB_SETS[_18],_19);
return false;
};
}
if(_17=="gb_imageset"){
a.onclick=function(){
GB_showImageSet(GB_SETS[_18],_19);
return false;
};
}
if(_17=="gb_image"){
a.onclick=function(){
GB_showImage(_1a.caption,_1a.url);
return false;
};
}
if(_17=="gb_page"){
a.onclick=function(){
var sp=_18.split(/, ?/);
GB_show(_1a.caption,_1a.url,parseInt(sp[1]),parseInt(sp[0]));
return false;
};
}
if(_17=="gb_page_fs"){
a.onclick=function(){
GB_showFullScreen(_1a.caption,_1a.url);
return false;
};
}
if(_17=="gb_page_center"){
a.onclick=function(){
var sp=_18.split(/, ?/);
GB_showCenter(_1a.caption,_1a.url,parseInt(sp[1]),parseInt(sp[0]));
return false;
};
}
}
}
});
}
AJS.AEV(window,"load",decoGreyboxLinks);
GB_showImage=function(_1d,url,_1f){
var _20={width:300,height:300,type:"image",fullscreen:false,center_win:true,caption:_1d,callback_fn:_1f};
var win=new GB_Gallery(_20);
return win.show(url);
};
GB_showPage=function(_22,url,_24){
var _25={type:"page",caption:_22,callback_fn:_24,fullscreen:true,center_win:false};
var win=new GB_Gallery(_25);
return win.show(url);
};
GB_Gallery=GreyBox.extend({init:function(_27){
this.parent({});
this.img_close=this.root_dir+"g_close.gif";
AJS.update(this,_27);
this.addCallback(this.callback_fn);
},initHook:function(){
AJS.addClass(this.g_window,"GB_Gallery");
var _28=AJS.DIV({"class":"inner"});
this.header=AJS.DIV({"class":"GB_header"},_28);
AJS.setOpacity(this.header,0);
AJS.getBody().insertBefore(this.header,this.overlay.nextSibling);
var _29=AJS.TD({"id":"GB_caption","class":"caption","width":"40%"},this.caption);
var _2a=AJS.TD({"id":"GB_middle","class":"middle","width":"20%"});
var _2b=AJS.IMG({"src":this.img_close});
AJS.AEV(_2b,"click",GB_hide);
var _2c=AJS.TD({"class":"close","width":"40%"},_2b);
var _2d=AJS.TBODY(AJS.TR(_29,_2a,_2c));
var _2e=AJS.TABLE({"cellspacing":"0","cellpadding":0,"border":0},_2d);
AJS.ACN(_28,_2e);
if(this.fullscreen){
AJS.AEV(window,"scroll",AJS.$b(this.setWindowPosition,this));
}else{
AJS.AEV(window,"scroll",AJS.$b(this._setHeaderPos,this));
}
},setFrameSize:function(){
var _2f=this.overlay.offsetWidth;
var _30=AJS.getWindowSize();
if(this.fullscreen){
this.width=_2f-40;
this.height=_30.h-80;
}
AJS.setWidth(this.iframe,this.width);
AJS.setHeight(this.iframe,this.height);
AJS.setWidth(this.header,_2f);
},_setHeaderPos:function(){
AJS.setTop(this.header,AJS.getScrollTop()+10);
},setWindowPosition:function(){
var _31=this.overlay.offsetWidth;
var _32=AJS.getWindowSize();
AJS.setLeft(this.g_window,((_31-50-this.width)/2));
var _33=AJS.getScrollTop()+55;
if(!this.center_win){
AJS.setTop(this.g_window,_33);
}else{
var fl=((_32.h-this.height)/2)+20+AJS.getScrollTop();
if(fl<0){
fl=0;
}
if(_33>fl){
fl=_33;
}
AJS.setTop(this.g_window,fl);
}
this._setHeaderPos();
},onHide:function(){
AJS.removeElement(this.header);
AJS.removeClass(this.g_window,"GB_Gallery");
},onShow:function(){
if(this.use_fx){
AJS.fx.fadeIn(this.header,{to:1});
}else{
AJS.setOpacity(this.header,1);
}
}});
AJS.preloadImages(GB_ROOT_DIR+"g_close.gif");
GB_showFullScreenSet=function(set,_36,_37){
var _38={type:"page",fullscreen:true,center_win:false};
var _39=new GB_Sets(_38,set);
_39.addCallback(_37);
_39.showSet(_36-1);
return false;
};
GB_showImageSet=function(set,_3b,_3c){
var _3d={type:"image",fullscreen:false,center_win:true,width:300,height:300};
var _3e=new GB_Sets(_3d,set);
_3e.addCallback(_3c);
_3e.showSet(_3b-1);
return false;
};
GB_Sets=GB_Gallery.extend({init:function(_3f,set){
this.parent(_3f);
if(!this.img_next){
this.img_next=this.root_dir+"next.gif";
}
if(!this.img_prev){
this.img_prev=this.root_dir+"prev.gif";
}
this.current_set=set;
},showSet:function(_41){
this.current_index=_41;
var _42=this.current_set[this.current_index];
this.show(_42.url);
this._setCaption(_42.caption);
this.btn_prev=AJS.IMG({"class":"left",src:this.img_prev});
this.btn_next=AJS.IMG({"class":"right",src:this.img_next});
AJS.AEV(this.btn_prev,"click",AJS.$b(this.switchPrev,this));
AJS.AEV(this.btn_next,"click",AJS.$b(this.switchNext,this));
GB_STATUS=AJS.SPAN({"class":"GB_navStatus"});
AJS.ACN(AJS.$("GB_middle"),this.btn_prev,GB_STATUS,this.btn_next);
this.updateStatus();
},updateStatus:function(){
AJS.setHTML(GB_STATUS,(this.current_index+1)+" / "+this.current_set.length);
if(this.current_index==0){
AJS.addClass(this.btn_prev,"disabled");
}else{
AJS.removeClass(this.btn_prev,"disabled");
}
if(this.current_index==this.current_set.length-1){
AJS.addClass(this.btn_next,"disabled");
}else{
AJS.removeClass(this.btn_next,"disabled");
}
},_setCaption:function(_43){
AJS.setHTML(AJS.$("GB_caption"),_43);
},updateFrame:function(){
var _44=this.current_set[this.current_index];
this._setCaption(_44.caption);
this.url=_44.url;
this.startLoading();
},switchPrev:function(){
if(this.current_index!=0){
this.current_index--;
this.updateFrame();
this.updateStatus();
}
},switchNext:function(){
if(this.current_index!=this.current_set.length-1){
this.current_index++;
this.updateFrame();
this.updateStatus();
}
}});
AJS.AEV(window,"load",function(){
AJS.preloadImages(GB_ROOT_DIR+"next.gif",GB_ROOT_DIR+"prev.gif");
});
GB_show=function(_45,url,_47,_48,_49){
var _4a={caption:_45,height:_47||500,width:_48||500,fullscreen:false,callback_fn:_49};
var win=new GB_Window(_4a);
return win.show(url);
};
GB_showCenter=function(_4c,url,_4e,_4f,_50){
var _51={caption:_4c,center_win:true,height:_4e||500,width:_4f||500,fullscreen:false,callback_fn:_50};
var win=new GB_Window(_51);
return win.show(url);
};
GB_showFullScreen=function(_53,url,_55){
var _56={caption:_53,fullscreen:true,callback_fn:_55};
var win=new GB_Window(_56);
return win.show(url);
};
GB_Window=GreyBox.extend({init:function(_58){
this.parent({});
this.img_header=this.root_dir+"header_bg.gif";
this.img_close=this.root_dir+"w_close.gif";
this.show_close_img=true;
AJS.update(this,_58);
this.addCallback(this.callback_fn);
},initHook:function(){
AJS.addClass(this.g_window,"GB_Window");
this.header=AJS.TABLE({"class":"header"});
this.header.style.backgroundImage="url("+this.img_header+")";
var _59=AJS.TD({"class":"caption"},this.caption);
var _5a=AJS.TD({"class":"close"});
if(this.show_close_img){
var _5b=AJS.IMG({"src":this.img_close});
var _5c=AJS.SPAN("Close");
var btn=AJS.DIV(_5b,_5c);
AJS.AEV([_5b,_5c],"mouseover",function(){
AJS.addClass(_5c,"on");
});
AJS.AEV([_5b,_5c],"mouseout",function(){
AJS.removeClass(_5c,"on");
});
AJS.AEV([_5b,_5c],"mousedown",function(){
AJS.addClass(_5c,"click");
});
AJS.AEV([_5b,_5c],"mouseup",function(){
AJS.removeClass(_5c,"click");
});
AJS.AEV([_5b,_5c],"click",GB_hide);
AJS.ACN(_5a,btn);
}
tbody_header=AJS.TBODY();
AJS.ACN(tbody_header,AJS.TR(_59,_5a));
AJS.ACN(this.header,tbody_header);
AJS.ACN(this.top_cnt,this.header);
if(this.fullscreen){
AJS.AEV(window,"scroll",AJS.$b(this.setWindowPosition,this));
}
},setFrameSize:function(){
if(this.fullscreen){
var _5e=AJS.getWindowSize();
overlay_h=_5e.h;
this.width=Math.round(this.overlay.offsetWidth-(this.overlay.offsetWidth/100)*10);
this.height=Math.round(overlay_h-(overlay_h/100)*10);
}
AJS.setWidth(this.header,this.width+6);
AJS.setWidth(this.iframe,this.width);
AJS.setHeight(this.iframe,this.height);
},setWindowPosition:function(){
var _5f=AJS.getWindowSize();
AJS.setLeft(this.g_window,((_5f.w-this.width)/2)-13);
if(!this.center_win){
AJS.setTop(this.g_window,AJS.getScrollTop());
}else{
var fl=((_5f.h-this.height)/2)-20+AJS.getScrollTop();
if(fl<0){
fl=0;
}
AJS.setTop(this.g_window,fl);
}
}});
AJS.preloadImages(GB_ROOT_DIR+"w_close.gif",GB_ROOT_DIR+"header_bg.gif");


script_loaded=true;

// accordion.js v2.0
//
// Copyright (c) 2007 stickmanlabs
// Author: Kevin P Miller | http://www.stickmanlabs.com
// 
// Accordion is freely distributable under the terms of an MIT-style license.
//
// I don't care what you think about the file size...
//   Be a pro: 
//	    http://www.thinkvitamin.com/features/webapps/serving-javascript-fast
//      http://rakaz.nl/item/make_your_pages_load_faster_by_combining_and_compressing_javascript_and_css_files
//

/*-----------------------------------------------------------------------------------------------*/

if (typeof Effect == 'undefined') 
	throw("accordion.js requires including script.aculo.us' effects.js library!");

var accordion = Class.create();
accordion.prototype = {

	//
	//  Setup the Variables
	//
	showAccordion : null,
	currentAccordion : null,
	duration : null,
	effects : [],
	animating : false,
	
	//  
	//  Initialize the accordions
	//
	initialize: function(container, options) {
	  if (!$(container)) {
	    throw(container+" doesn't exist!");
	    return false;
	  }
	  
		this.options = Object.extend({
			resizeSpeed : 8,
			classNames : {
				toggle : 'accordion_toggle',
				toggleActive : 'accordion_toggle_active',
				content : 'accordion_content'
			},
			defaultSize : {
				height : null,
				width : null
			},
			direction : 'vertical',
			onEvent : 'click'
		}, options || {});
		
		this.duration = ((11-this.options.resizeSpeed)*0.15);

		var accordions = $$('#'+container+' .'+this.options.classNames.toggle);
		accordions.each(function(accordion) {
			Event.observe(accordion, this.options.onEvent, this.activate.bind(this, accordion), false);
			if (this.options.onEvent == 'click') {
			  accordion.onclick = function() {return false;};
			}
			
			if (this.options.direction == 'horizontal') {
				var options = $H({width: '0px'});
			} else {
				var options = $H({height: '0px'});			
			}
			options.merge({display: 'none'});			
			
			this.currentAccordion = $(accordion.next(0)).setStyle(options);			
		}.bind(this));
	},
	
	//
	//  Activate an accordion
	//
	activate : function(accordion) {
		if (this.animating) {
			return false;
		}
		
		this.effects = [];
	
		this.currentAccordion = $(accordion.next(0));
		this.currentAccordion.setStyle({
			display: 'block'
		});		
		
		this.currentAccordion.previous(0).addClassName(this.options.classNames.toggleActive);

		if (this.options.direction == 'horizontal') {
			this.scaling = $H({
				scaleX: true,
				scaleY: false
			});
		} else {
			this.scaling = $H({
				scaleX: false,
				scaleY: true
			});			
		}
			
		if (this.currentAccordion == this.showAccordion) {
		  this.deactivate();
		} else {
		  this._handleAccordion();
		}
	},
	// 
	// Deactivate an active accordion
	//
	deactivate : function() {
		var options = $H({
		  duration: this.duration,
			scaleContent: false,
			transition: Effect.Transitions.sinoidal,
			queue: {
				position: 'end', 
				scope: 'accordionAnimation'
			},
			scaleMode: { 
				originalHeight: this.options.defaultSize.height ? this.options.defaultSize.height : this.currentAccordion.scrollHeight,
				originalWidth: this.options.defaultSize.width ? this.options.defaultSize.width : this.currentAccordion.scrollWidth
			},
			afterFinish: function() {
				this.showAccordion.setStyle({
          height: 'auto',
					display: 'none'
				});				
				this.showAccordion = null;
				this.animating = false;
			}.bind(this)
		});    
    options.merge(this.scaling);

    this.showAccordion.previous(0).removeClassName(this.options.classNames.toggleActive);
    
		new Effect.Scale(this.showAccordion, 0, options);
	},

  //
  // Handle the open/close actions of the accordion
  //
	_handleAccordion : function() {
		var options = $H({
			sync: true,
			scaleFrom: 0,
			scaleContent: false,
			transition: Effect.Transitions.sinoidal,
			scaleMode: { 
				originalHeight: this.options.defaultSize.height ? this.options.defaultSize.height : this.currentAccordion.scrollHeight,
				originalWidth: this.options.defaultSize.width ? this.options.defaultSize.width : this.currentAccordion.scrollWidth
			}
		});
		options.merge(this.scaling);
		
		this.effects.push(
			new Effect.Scale(this.currentAccordion, 100, options)
		);

		if (this.showAccordion) {
			this.showAccordion.previous(0).removeClassName(this.options.classNames.toggleActive);
			
			options = $H({
				sync: true,
				scaleContent: false,
				transition: Effect.Transitions.sinoidal
			});
			options.merge(this.scaling);
			
			this.effects.push(
				new Effect.Scale(this.showAccordion, 0, options)
			);				
		}
		
    new Effect.Parallel(this.effects, {
			duration: this.duration, 
			queue: {
				position: 'end', 
				scope: 'accordionAnimation'
			},
			beforeStart: function() {
				this.animating = true;
			}.bind(this),
			afterFinish: function() {
				if (this.showAccordion) {
					this.showAccordion.setStyle({
						display: 'none'
					});				
				}
				$(this.currentAccordion).setStyle({
				  height: 'auto'
				});
				this.showAccordion = this.currentAccordion;
				this.animating = false;
			}.bind(this)
		});
	}
}
	


function resetForm() {
    this.form.reset();    
    Form.getInputs(this.form, 'text').each(function(input) {
        $(input).value = Element.readAttribute($(input), 'default_text');
        $(input).addClassName('faded_text');
    });
    if($('results-div')) { $('results-div').innerHTML = Element.readAttribute($('results-div'), 'default_text'); }
    if($('results-block')) { $('results-block').innerHTML = Element.readAttribute($('results-block'), 'default_text'); }
    clearLayers(["markers"]);
}

function expandAll() {
    blocks = $$('.acc_toggle');
    blocks.each(function(block) {
        if (block.parentNode.id == "accord") { 
            $(block).next(0).show();
        }
        else {
            $(block).next(0).hide();
        }
    });
    $('expand-all').hide();
}

function handle_accordion(block_number, form_type) {
    blocks = $$('.acc_toggle');
    blocks.each(function(block) {
        if(block.parentNode.id == "accord" && block.id != block_number) {
            $(block).next(0).hide();
        }
        else if (block.parentNode.id == "accord" && block.id == block_number) {
            $(block).next(0).show();
            if($('expand-all')) { $('expand-all').show();}
        }
    });
    current_form_id = form_type + "_form";
    forms = $$('.acc_form');
    forms.each(function(form) {
        if(form.id != current_form_id) {
            $(form).hide();
            firstChild = Element.childElements(form)[0];
            if(firstChild && Element.inspect(firstChild) == "<form>") {
                firstChild.reset();
            }
        }
        else {
            $(form).show();
        }
    });
}

function show_form(form_id) {
    if($(form_id)) { $(form_id).show(); }
}

function toggle_accordion(e) {
    block_number = this.id.substring(0,1);
    form_type = this.id.substring(this.id.indexOf('-')+1, this.id.lastIndexOf('_'));
    handle_accordion(block_number, form_type);
    show_form(form_type+"_form");
}

function clear_default() {
    if(this.value == Element.readAttribute(this, 'default_text')) {
        this.value = "";
        Element.removeClassName($(this.id), 'faded_text');
    }
}

function set_default_if_value_empty() {
    if(this.value.length == 0 || this.value == "" || this.value == this.default_text) {
        Element.addClassName($(this), 'faded_text');
        this.value = Element.readAttribute($(this), 'default_text');
    }
}

function loadAccordion() {
    var verticalAccordions = $$('.acc_toggle');
    verticalAccordions.each(function(accordion) {
        Event.observe(accordion, 'click', toggle_accordion, false);
    });
    
    //Attach click events to text fields with class *default_text*
    var input_fields = $$('.default_text');
    input_fields.each(function(input_field) {
        Event.observe(input_field, 'focus', clear_default, false);
        Event.observe(input_field, 'blur', set_default_if_value_empty, false);
    });
    
    var reset_buttons = $$('.reset_button');
    reset_buttons.each(function(reset_button) {
        Event.observe(reset_button, 'click', resetForm, false);
    });
}
