/**
 * page_roiv2.js
 * This javascript file handles page interactions, including events
 * fired on page load, the accordion control, searches, etc. Note you will need
 * to change to GMapKey global variable to a key for your URL. Unless you like
 * that pop-up warning from Google, in which case by all means leave it.
 * 
 * @version 	v3.0.0  30 August 2009
 * @author 		Rajendra Sarangi
 * @license 	RoadsofIndia.com
 */


/**
 * Global variables
 */
 var wsbase = "./ws/v5/";   //Base URL for the ROI REST web services . 
// ws service pages:
var pointoverlay = "ws_roi_pointoverlay.php";  // Reverse Geocode
var poi_geocode ="ws_roi_poi_geocode.php"; // Geo Code POI and get address
var roi_address = "ws_roi_address.php"; // Geo Code Address and show in Suggestion box
var addressnum = "ws_geo_addressnum.php"; // Get address geocoded ID
var roi_streetname = "ws_roi_streetname.php"; // Street Name Search
var findaddress = "ws_roi_findaddress.php"; // Find address
var streetname_geocode ="ws_roi_streetname_geocode.php"; // Street Name GeoCode
var findpoibycat = "ws_roi_findpoibycat.php"; // Find Poi by Cat
var roi_routing = "ws_roi_routing.php"; // Find for ROI Routing ws_roi_routing_v6-2.php
var addressbycitycat = "ws_roi_addressbycitycat.php"; // Find Address by city and POI Categories
//---------------------------------------------------------------
var cityArray =  Array("Abohar", "Adampur", "Adilabad", "Agartala", "Agra", "Ahmedabad", "Ahmedgarh", "Ahmednagar", "Ajanta", "Ajmer", "Akola", "Alibaug", "Aligarh", "Allahabad", "Alleppey", "Almora", "Aluva", "Alwar", "Ambala", "Ambassa", "Amravati", "Amritsar", "Anand", "Anandpur", "Anandpursahib", "Anantapur", "Anjar", "Ankleshwar", "Annavaram", "Anupshahr", "Arki", "Asansol", "Aurangabad", "Ayodhya", "Badami", "Bageshwar", "Baghpat", "Baleswar(Balasore)", "Bareilly", "Barnala", "Barsana", "Batala", "Bathinda", "Bawal", "Belgaum", "Bellary", "Bengaluru", "Berhampur", "Bhadrachalam", "Bhandara", "Bharatpur", "Bharuch", "Bhavnagar", "Bhilad", "Bhilai", "Bhilwara", "Bhiwadi", "Bhiwani", "Bhopal", "Bhubaneshwar", "Bicholim", "Bidar", "Bijapur", "Bijnor", "Bikaner", "Bilaspur(Chhattisgarh)", "Bilaspur(Himachal Pradesh)", "Bisalpur", "Biswan", "Bodh Gaya", "Budhana", "Calangute", "Canacona", "Candolim", "Chamba", "Chandigarh", "Chandpur", "Changanassery", "Chennai", "Cherthala(Shertallai)", "Chidambaram", "Chiplun", "Chitradurga", "Chittaurgarh", "Cochin", "Coimbatore", "Colva", "Cuttack", "Dakor", "Dalhousie", "Darjeeling", "Dasuya", "Davangere", "Deeg", "Dehradun", "Delhi", "Dewas", "Dhanbad", "Dharuhera", "Dhule", "Dhuri", "Dibrugarh", "Digboi", "Doiwala", "Draksharamam", "Durgapur", "Dwarahat", "Dwarka", "Ellora", "English Bazar", "Erode", "Faridabad", "Faridkot", "Fatehabad", "Fatehpur Sikri", "Fazilka", "Firozpur", "Ganapatiphule", "Gandhidham", "Gandhinagar", "Gangapur", "Garhmukteshwar", "Ghaziabad", "Golaghat", "Gorakhpur", "Goraya", "Govardhan", "Greater Noida", "Gulbarga", "Guntur", "Gurdaspur", "Gurgaon", "Guruvayur", "Guwahati", "Gwalior", "Haflong", "Haldia", "Haldwani", "Hampi", "Hapur", "Haridwar", "Hathras", "Herbertpur", "Himatnagar", "Hissar", "Hoshangabad", "Hoshiarpur", "Hospet", "Howrah", "Hubli", "Hyderabad", "Indore", "Islampur", "Jagdalpur", "Jagraon", "Jaipur", "Jaisalmer", "Jalandhar", "Jammu", "Jamnagar", "Jamshedpur", "Jashpur", "Jejuri", "Jhajjar", "Jhansi", "Jhunjhunu", "Jodhpur", "Jorhat", "Kadapa(Cuddapah)", "Kailashahar", "Kakinada", "Kalady", "Kalol", "Kalpetta", "Kanchipuram", "Kangra", "Kannur", "Kanpur", "Kanyakumari", "Kapurthala", "Karimnagar", "Karnal", "Karur", "Kasaragod", "Kasauli", "Kashipur", "Kayamkulam", "Khajuraho", "Khammam", "Khandala", "Kharagpur", "Kharar", "Khurja", "Kodungallur", "Kolhapur", "Kolkata", "Kollam", "Kota", "Kotdwara", "Kotkapura", "Kottayam", "Kovalam", "Kozhikode", "Krishnagiri", "Kudremukh", "Kullu", "Kumarakom", "Kumbakonam", "Kumily", "Kurukshetra", "Latur", "Lucknow", "Ludhiana", "Madikeri", "Madurai", "Mahabaleshwar", "Mahabalipuram(Mamallapuram)", "Mahaban", "Mahabubnagar", "Mahendragarh", "Malappuram", "Malerkotla", "Malout", "Manali", "Mandawa", "Mandi", "Mandi Dabwali", "Mangalore(Mangaluru)", "Mapusa", "Margao", "Matheran", "Mathura", "Meerut", "Modhera", "Modinagar", "Moga", "Mohali", "Moradabad", "Morinda", "Mount Abu", "Mughalsarai", "Mukerian", "Muktsar", "Mumbai", "Muradnagar", "Murwara", "Mussoorie", "Mysore(Mysuru)", "Nagaon", "Nagapattinam", "Nagarjuna Sagar", "Nagaur", "Nagpur", "Nahan", "Naharlagun", "Nainital", "Nakodar", "Nalagarh", "Namakkal", "Nandgaon", "Narnaul", "Narsimhapur", "Nashik", "Nathdwara", "Nawalgarh", "Nellore", "Nizamabad", "Noida", "Old Goa", "Ongole", "Padgha", "Palakkad(Palghat)", "Palampur", "Palani", "Palitana", "Palwal", "Panaji", "Panchgani", "Panchkula", "Pandharpur", "Panipat", "Parbhani", "Pasighat", "Pathanamthitta", "Pathankot", "Patiala", "Patna", "Pattadakal", "Perinthalmanna", "Phagwara", "Phillaur", "Pilani", "Pilkhuwa", "Pillayarpatti", "Pinjore", "Pithoragarh", "Ponda", "Pondicherry", "Ponnani", "Pragpur", "Pudukkottai", "Punalur", "Pune", "Puri", "Purulia", "Pushkar", "Quepem", "Radha Kund", "Rae Bareli", "Raipur", "Rajahmundry", "Rajgir", "Rajkot", "Rajnandgaon", "Rameshwaram", "Ramnagar", "Ranaghat", "Ranchi", "Ranikhet", "Ratnagiri", "Raya", "Rewari", "Rishikesh", "Rohtak", "Roorkee", "Ropar(Rupnagar)", "Rourkela", "Rudrapur", "Sagar", "Saharanpur", "Salem", "Samalkha", "Sambalpur", "Sanawar", "Sangareddy", "Sangrur", "Sanguem", "Sanjan", "Sawai Madhopur", "Shahdol", "Shimla", "Shirdi", "Shivpuri", "Sholapur", "Silchar", "Siliguri", "Sirsa", "Sitapur", "Sohna", "Somnath", "Sonipat", "Srikakulam", "Srikalahasti", "Srinagar", "Sulthan Bathery", "Sunam", "Surat", "Surendranagar", "Tarn Taran", "Tezpur", "Tezu", "Thalassery", "Theni", "Thiruvananthapuram(Trivandrum)", "Thrissur", "Tiracol", "Tiruchirapalli", "Tirumala", "Tirunelveli", "Tirupati", "Tiruvannamalai", "Tumkur", "Udaipur(Rajasthan)", "Udaipur(Tripura)", "Udhagamandalam(Ooty)", "Udhampur", "Udvada", "Ujjain", "Una", "Unnao", "Vadodara", "Valpoi", "Valsad", "Vapi", "Varanasi", "Vasai", "Vasco", "Vasind", "Vellore", "Vijayawada", "Vikasnagar", "Villages & Towns", "Virar", "Virudhunagar", "Visakhapatnam", "Vizianagaram", "Vrindavan", "Warangal", "Yadagirigutta", "Yamunanagar"
 ); // Array of Cities
var categoryArray = Array ( "Airlines & Travel Agencies", "Airport", "Atm", "Banks & Money Exchangers", "Bar Or Pub", "Bus Station", "Cinema", "Clinics", "Clubs & Golf Courses", "Colleges", "Commercial Complex", "Courier & Post Offices", "Crematorium", "Embassies", "Factories & Workshops", "Flats", "Function Halls & Auditoriums", "Government Bodies", "Hospital & Nursing Homes", "Hotel", "Hotel Or Motel", "Houses", "Information Technology Centers", "Offices", "Park/recreation Area", "Petrol/gasoline Station", "Pharmacies", "Police Stations", "Religious Places", "Rental Car Agency", "Residential Areas", "Restaurant", "Road Junctions", "Schools & Preschools", "Shop", "Shopping", "Shopping Centre", "Stadiums & Playgrounds", "Super Market", "Tourist Spots & Historical Places", "Train Station", "Training Institutions", "Villages & Towns" );
var fzoom = 11; // Display Feature - Zoom Label - used with map.setCenter(point,fzoom)
var selectedArray = new Array(9);  //Array of elements for selected records
var identifyArray = new Array(9);  //Array of elements stored when property is identified on the screen
var facilityArray = new Array(3);  //Array of elements stored for a selected facility, like a school
var popupArray = new Array(3);  //Array to hold existing popup id's - 0=selected,1=identify,2=facility
// var wsbase = "http://maps.co.mecklenburg.nc.us/rest/";   //Base URL for the REST web services
var startPointArray = []; // Array of elements for Start Point
var endPointArray = []; // Array of elements for end point.
var poi_city, poi_cat, purl;
var pager_index = 1;  //For the results table paging. Hack.
var pager_max = 0;  //For the results table paging. Hack.
var currenttab = "SEARCH";  //Sets the default accordion selection.
var streetview, vemap, map, environment_layer, mecksid07, nexrad, imarker_layer, smarker_layer, fmarker_layer, sIcon, iIcon, fIcon;  //Global vars for the virtual earth map, openlayers map, some openlayers layers, markers, popup, etc. 

var ajaxImage = '<img src="images/ajax-loader-flower-sm.gif" alt="loading..." />';
/**
 *Ye olde browser ready functioning. All the crud that needs to set the page up on
 *first load happens here.
 */
  document.namespaces;
 $(document).ready(function() {
 	// Handle page resizing
	content_resize();
	$(window).wresize(content_resize);
	// Face box Display
	$('a[rel*=facebox]').facebox();  

    // Activate UI controls
    // Dialogs
    $("#help_vid_dialog").dialog({ title: 'Help!', width: 455, height: 435, autoOpen: false, modal: true, overlay: { opacity: 0.7, background: "black" }, buttons: {"Close": function() {$(this).dialog("close");} } });
 
    $("#ie6_dialog").dialog({ title: 'Browser Warning - Internet Explorer 6', width: 475, height: 650, autoOpen: false, modal: true,  buttons: {"Close": function() {$(this).dialog("close");} }});

    
    // Show IE6 warning if IE6
    if (jQuery.browser.msie && parseInt(jQuery.browser.version) < 7) { $('#ie6_dialog').dialog('open'); }
    
    // Accordions
    $('#left-accordion').accordion({header: "h3", active: 0,  animated: 'bounceslide', collapsible: false, autoHeight: false}).bind("accordionchange", function(event, ui) {
        if (ui.newHeader[0]) processData(ui.newHeader[0].id);
    });
    $("#right-accordion").accordion({header: "h3", animated: 'bounceslide', collapsible: true, autoHeight: false});

    $('#route-accordion').accordion({header: "h4", animated: 'bounceslide', collapsible: true, autoHeight: false}).bind("accordionchange", function(event, ui) {
        if (ui.newHeader[0]) processData(ui.newHeader[0].id);
    });

    // Slider
    $("#theopacity").slider({value: 60, orientation: "horizontal", stop: function () { 
	   // Set layer(s) opacity
        var opacity = $("#theopacity").slider("value") / 100 ;
        map.layers[$('#opacitydll').val()].setOpacity(opacity);
    }});
    collapse('right');

	$("#start_address").checkinput();
//	$("#start_address").autocomplete(
//		wsbase + roi_address + "?format=json&callback=?&address=",
//		{ delay:1000, minChars:3, matchSubset:1, onItemSelect:findValueStartPoint, autoFill:false, maxItemsToShow:25, scroll: true, cacheLength: 10}); //onItemSelect:findValue, onFindValue:findValue,formatItem:formatItem,,, onFindValue:findValueStartPoint,
    $("#goto_address").checkinput();
//	$("#goto_address").autocomplete(
//		wsbase + roi_address + "?format=json&callback=?&address=",
//		{ delay:1000, minChars:3, matchSubset:1, autoFill:false,  onItemSelect:findValueEndPoint, maxItemsToShow:25, scroll: true, cacheLength: 10});// onFindValue:findValueEndPoint,

    // Activate search controls
    getPOInames(); // for Business Search
	//setFacilityDDL();
    setClickEvents();
     
	$("#address").checkinput();
	 // Activate autocomplete fields
//	$("#address").autocomplete(
//		wsbase + roi_address +  "?format=json&callback=?&address=",
//		{ delay:400, minChars:6, matchSubset:1, onItemSelect:findValue, onFindValue:findValue, autoFill:false, maxItemsToShow:10, cacheLength: 10 });
	$("#streetname").checkinput();
	$("#streetname").autocomplete(
		wsbase + roi_streetname + "?format=json&callback=?&streetname=",
		{ delay:400,minChars:2,matchSubset:1,autoFill:false,maxItemsToShow:10,cacheLength: 10, autoFill:true});
	$("#cityname").autocompleteArray(cityArray,{delay:10,minChars:1,matchSubset:1,autoFill:true,maxItemsToShow:10});//onItemSelect:selectItem,//onFindValue:findValue,
     
    // Set focus to search bar
    $(".txtbox").focus(function(e){ $(this).addClass("activeSearch"); 
	// $(this).attr("value", "name, locality, city") 
	});  
    $(".txtbox").blur(function(e){ $(this).removeClass("activeSearch");  });
    $("#address").focus();
   // $("#top_toolbar").addPrintButton();
    $('.printme').printpage();
	// Initialize map
	 map_init();  
	
});

// Lazy load widget maps
function loadWidgetMapJS (type) {
    if (type == "gsv") {
        google.load("maps", "2", {"callback": function() {$('#streetview_dialog').dialog('open');} });
        //alert(typeof GMap3);
    }
    if (type == "msve") {
        if (eval("typeof VEMap") == "undefined") {
            $.getScript("http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2",
                function() {
                    var interval = setInterval(function(){if ((eval("typeof VEMap") != "undefined")   
                    && (document.getElementById("map").attachEvent != undefined))   
                    {clearInterval(interval);  $('#ve_dialog').dialog('open');  }}, 2000); 
                });
        }
        else { $('#ve_dialog').dialog('open'); }
    }
}

/**
 * These two functions handle the dialog open event for the widget maps.
 */
function ve_dialog_init(type,data) { widgetMaps("Virtual Earth", map.getCenter(), false); }
function streetview_dialog_init(type,data) { widgetMaps("Google Street View", map.getCenter(), true); }

/**
 * This sets the click events for "GO" buttons on the search tab
 */ 
function setClickEvents() {
	
    // Have print-toggle call content_resize
    $(".print_orientation").click(function() {
        content_resize();
    });
    // Map Search Button Click
	$('#geocodebtn').click(function() {
	   $('#ajaxLoading').elapsor({});	//.html("Loading..."+ ajaxImage) .addClass("dataLoading");
		var addr = $('#address').val();		
		addr =  urlencode(addr); 
		url = wsbase + findaddress+ "?format=json&callback=ws_addressnum&jsonp=?&address=" + addr;
	//	$('.ternMask').elapsor({});			
		$.getJSON(url);		
		//$('#right-accordion').accordion('option','active',0);
	})

//street name search
	$('#streetnamebtn').click(function() {
		url = wsbase + streetname_geocode + "?format=json&callback=ws_geocode&jsonp=?";
		var strn = $('#streetname').val();
		strn= strn.split(',');
		args = "&housenum=&streetname=" + urlencode(strn[0]); // $('#streetname').val()
		url = url + args + "&roadtype=&suffix=&zipcode=&city=&unit=&prefix=";
		$.getJSON(url);
	})

// Show the POI by City and Categories 
	$('#facilitybtn').click(function(){
		$('#ajaxLoading').elapsor({}); //.addClass("dataLoading");
		// Get the X, Y, and other needed info
		var poicat = $('#facility').val();
		var poicity = $('#cityname').val();		
		var poiname = $('#facilityinfo').val();
//		Check for error fields
		if (poicity == "" || poicity == null)
			{
				alert("Please enter a City");
				$('#cityname').focus();
				return false;
			}
         if (poiname == "" || poiname == null)
			{
				alert("Please enter a Name");
				$('#poiname').focus();
				return false;
			}
			url = wsbase + findpoibycat +'?format=json&callback=ws_addressnum&jsonp=?&address=' + urlencode(poiname)+'&cat='+urlencode(poicat)+'&city='+urlencode(poicity);
			$.getJSON(url);			
	})

// Start Address Button Click
	$('#startbtn').click(function(){		
		findstartpoint();		
		// $('#left-accordion').accordion('activate',1);
	});
	// end of Startbtn click
// GOTO Address Button Click
	$('#gotobtn').click(function(){findgotopoint();});
	// End of Start & goto Address find -------
// Direction Finder Button is clicked - 
	// check Start address input field and validate.
	// Check GoTo Address input field and validate.
    $('#directionbtn').click(function(){findDirection();})
}


/*  This function suggests the POIs in a City by their Category. ***/
function getPOInames(){
	$('#facility').change(function(){poi_cat = $('#facility').val(); $('#cityname').focus();});    
	$('#cityname').blur(function(){
	poi_city = $('#cityname').val();
	purl = wsbase + addressbycitycat+ "?format=json&callback=?&city="+urlencode(poi_city)+"&cat="+urlencode(poi_cat)+"&address=";
	$('#facilityinfo').focus();
	$("#facilityinfo").autocomplete(purl,
		{ delay:400, minChars:3, matchSubset:1, autoFill:false, onItemSelect:findValue, onFindValue:findValue, maxItemsToShow:25, scroll: true, cacheLength: 10});
	});
}


/*  These functions control the sizing of page elements */
function content_resize() {
    if (!$("#print-toggle").is(':checked')) {
        // Regular Formatting
        var h = $(window).height() - 76;
        $(".height_control").height(h + "px");
    }
    else {
        // Print formatting
        if ($("#portrait").is(':checked')) {
            // Portrait
            $(".height_control").height("1200px");
        }
        else {
            // Landscape
            $(".height_control").height("800px");
        }
    }
}
function collapse(side) {
	if (side == "right") {
		if ($("#right").is(":visible")) {
                $("#right").fadeOut("normal", function () {
                    $("#content").css("margin-right","0");
                    $("#right-collapse-img").attr("src", "images/collapse-left-arrow.gif").attr("alt", "Show Map Controls & Legend");
                });
		}
		else {
                $("#content").css("margin-right","160px");
                $("#right-collapse-img").attr("src", "images/collapse-right-arrow.gif").attr("alt", "Hide Map Controls & Legend");
                $("#right").fadeIn("normal");
		}
	}
	if (side == "left") {
		if ($("#left").is(":visible")) {
                $("#left").fadeOut("normal", function () {
                    $("#content").css("margin-left","0");
                    $("#left-collapse-img").attr("src", "images/collapse-right-arrow.gif").attr("alt", "Show Search Form & Results");
                });
		}
		else {
			$("#content").css("margin-left","350px");
			$("#left-collapse-img").attr("src", "images/collapse-left-arrow.gif").attr("alt", "Hide Search Form & Results");
               $("#left").fadeIn("normal");
		}
	}
}
/* ----ShowHide ------*/
function showhide(divid){
		$(divid).toggle();
}
/**
 * Each accordition function that requires data processing (i.e. GIS Data) on load
 * is below. Mostly it's JSONP calls back to web services.
 * @param {string} theswitch
 */
function processData(theswitch) {
	currenttab = theswitch;
	if (selectedArray[0]) {
	switch (theswitch) {
		
     }
	}
}