﻿// jquery extend
$.fn.extend({
	reset: function() {
		return this.each(
			function() {
				$(this).is('form') && this.reset();
			}
		)
	}
});

// Globar Map handler
var map;


// array for Location objects
var myLocation = [];
var storeFilteredLocation = [];

// class and constructor
Location = function( marker , x , y ,title , desc , esso , zone ,addr )
{	
	// constructor default initialization
	this.marker=marker||'';this.x=x||0;this.y=y||0;this.title=title||'default';this.desc=desc||'default';this.esso=esso||'False';this.zone=zone||0;this.addr=addr||'';
}


$(document).ready(function() {
	map = new GMap2(document.getElementById("map_canvas"));
	initMap();	//setMapCamera,
    ajaxSelect();//GetJSON,initLocationObject
	initEvent ();
	/********
	 *	added for eva start
	 ********/
	searchFromHome();
	/********
	 *	added for eva ended
	 ********/
	//console.log( myLocation );
});

/********
*	added for eva start
********/
function searchFromHome()
{
	var keyword = gup('search');
	if ( keyword )
	{
		 $( '#searchbox' ).val( keyword );
		keywordSearch ( );
	}
}
function gup( name )
{
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if( results == null )
		return "";
	else
		return results[1];
}
/********
*	added for eva ended
********/



/*AJAX*/
function ajaxSelect() {
    msg.loadStart();
    $.ajax({ url: 'admin/_locatorAjaxUpdate.aspx', data: 'type=select', type: 'POST', async: false,
        success: function(e) {
					initLocation( eval('(' + e.replace(/\n/g,'\\n') + ')') );
					msg.close(); 
				}
    });
}

/*INIT*/
function initMap() {
	var center = new GLatLng(1.3964986732737172, 103.81942749023438);
	map.setCenter(center, 11);
	map.setUIToDefault();
}

/*INIT Event*/
function initEvent (  )
{
	$('#frmSearchSubmit').click(function(){
		keywordSearch();
	});
	$('#frmSearchReset').click(function(){
		$( '#frmSearch' ).reset();
		$( '#search-list' ).html('');
	});
	$('#frmFilterSubmit').click(function(){
		storeFilter();
	});
	$('#frmFilterReset').click(function(){
		$( '#frmFilter' ).reset();
		var s = function(){var t=[];for (var i in myLocation ){t.push(i);}return t;}
		reinitLocation(s());
	});
	$( '#frmSearch,#frmFilter' ).keypress(function( e ){
		if ( e.which == 13 ) {
			return false;
		}
	});
	$( '#searchbox' ).keypress(function( e ){
		if ( e.which == 13 ) {
			keywordSearch();
		}
	});
}

/***
*  Trigger : After AjaxSelect Loaded JSON from DB
*  Add markers
*/
function initLocation( json ) {
    var r = json.TABLE[0].ROW;
    for (var i in r ){
		ra = r[i].COL[3].DATA.split(',');
		myLocation[i] = new Location(addMarker(ra,i),ra[1],ra[0],r[i].COL[1].DATA,r[i].COL[2].DATA,r[i].COL[4].DATA,r[i].COL[5].DATA,r[i].COL[6].DATA);
    }
	initForm();
}

/*REINIT*/
function reinitLocation( t ) {
	map.clearOverlays();
	storeFilteredLocation = [];
	var l = myLocation;
	for (var i in t ){
		storeFilteredLocation[i] = new Location(addMarker([l[t[i]].y,l[t[i]].x],i),l[t[i]].y,l[t[i]].x,l[t[i]].title,l[t[i]].desc,l[t[i]].esso,l[t[i]].zone,l[t[i]].addr);
	}
}


/*EVENT*/


/*Core Function*/
function keywordSearch (  )
{
	var paramStr = $( '#searchbox' ).val();
	var paramArr = paramStr.split( /\s|,|\./ );//console.log( paramArr );

	var html = '';
	var l = myLocation;
	for (var i in l )
	{
		if( z.arrEleInArr( l[i].title.split(' ') , paramArr ) )
		{
			html += getInfoListHTML(i)+'<br/>';
		}
		if( z.arrEleInArr( l[i].addr.split(/\s|,|\./) , paramArr ) )
		{
			html += getInfoListHTML(i)+'<br/>';
		}
		if( paramStr == l[i].title ){
			openStoreInfo( i );
		}
	}
	if (html == '' && paramStr != '' ) { 
		keywordSearch2();
	} else { $('#search-list').html(html); }
}
function storeFilter(){

	initMap();	//setMapCamera,
	var param =  { zone:$('#select-zone').val(),esso:$('#select-esso').val() };
	var temp = []
    var l = myLocation;
    for (var i in l )
	{
		if ( param.zone == '-1' && param.esso == '-1' ){
			temp.push(i);
		} 
		// and [trigger if zone,esso field are selected]
		else if( param.zone != '-1' && param.esso != '-1' ){
			if( param.zone == l[i].zone && param.esso == l[i].esso )
				temp.push(i);
		}
		// or [trigger if either zone,esso field is blank]
		else if( param.zone == l[i].zone || param.esso == l[i].esso )
				temp.push(i);
    }
	//console.log( temp );
	reinitLocation( temp );
}
function openStoreInfo(i){
	map.setZoom(14);
	myLocation[i].marker.openInfoWindowHtml(getInfoWindowHTML(i));
}
/***
 *  Trigger : Click at Add Marker Button
 *  Add new marker at the center of [Map]
 */
function addMarker( ra,i ) {
    var marker = new GMarker(new GLatLng( ra[1], ra[0] ), { draggable: false });
    map.addOverlay(marker);//console.log(map);
    GEvent.addListener(marker, "click", function() {	openStoreInfo(i);   });
	return marker;
}
//
/***
*  Trigger : Click at Button in Marker info window
*  save into [grid,Database]
*/

// istore select option init
function initForm()
{
	//multi selection
	var html=[];
	var zone=[];
	var dLine = ['---------------------------------------------','dline','','class="dline"'];
	zone[0] = [dLine,['East Zone'   ,'dline','','class="dline"']];
	zone[1] = [dLine,['South Zone'  ,'dline','','class="dline"']];
	zone[2] = [dLine,['West Zone'  ,'dline','','class="dline"']];
	zone[3] = [dLine,['North Zone'   ,'dline','','class="dline"']];
	zone[4] = [dLine,['Central Zone','dline','','class="dline"']];
	for(var i in myLocation )
	{
		switch (myLocation[i].zone)
		{
			case '0': zone['0'].push([myLocation[i].title,i]);break;
			case '1': zone['1'].push([myLocation[i].title,i]);break;
			case '2': zone['2'].push([myLocation[i].title,i]);break;
			case '3': zone['3'].push([myLocation[i].title,i]);break;
			case '4': zone['4'].push([myLocation[i].title,i]);break;
			default: break;
		}
	}
	html=html.concat(zone[0]);
	html=html.concat(zone[1]);
	html=html.concat(zone[2]);
	html=html.concat(zone[3]);
	html=html.concat(zone[4]);
	$('#iStoresSelect').append(In.options(html)).click(function(){
		if($(this).val()!='dline')	{
			openStoreInfo($(this).val());
		}
	});

	// single select
	html=[['East Zone',0],['South Zone',1],['North Zone',2],['West Zone',3],['Central Zone',4]];
	$('#select-zone').append(In.options(html));

	// searchbox autocomplete
	var cities=[];
	for(var i in myLocation) cities.push(myLocation[i].title);
	$('#searchbox').focus().autocomplete(cities,{matchContains: "word"});
}



/*Helper Function*/
function getZone(i){
	var zone = '';
	switch(i){
		case '0':zone='East';break;
		case '1':zone='South';break;
		case '2':zone='West';break;
		case '3':zone='North';break;
		case '4':zone='Central';break;
	}
	return zone;
}

function getInfoWindowHTML( i )
{
	var ls=myLocation[i];
	var esso  = ( ls.esso ==true || ls.esso.toLowerCase() == "true")?', in ESSO Station':'';
	var addr  = ls.addr.replace(/\n/g,'<br/>');
	var desc  = ls.desc.replace(/\n/g,'<br/>');
	var infoForm = "<span class='mainText' style='font-weight:bold'>" + ls.title + "</span><div class='mainText'>" + esso + "<br/>" + desc + "<br/> "+ addr +" </div>";
	return infoForm;
}
function getInfoListHTML ( i )
{
	var ls=myLocation[i];
	var addr  = ls.addr.replace(/\n/g,'<br/>');
	var esso  = ( ls.esso ==true || ls.esso.toLowerCase() == "true")?', in ESSO Station':'';
	var desc  = ls.desc.replace(/\n/g,'<br/>');
	var infoForm = "<span style='font-weight:bold;cursor:pointer' index='"+i+"' onclick='listGotoLocation(this)'>" + ls.title + "</span>" + esso + "<br/>" + desc + "<br/> "+ addr + "<br/>";
	return infoForm;
}
function listGotoLocation( i )
{
	i = $(i).attr('index');
	openStoreInfo(i);
}
