﻿var d = document;
var shopObj = new Object();
var natureID = level2;
var terminalID = level3;
var catID = level4;
var linkList = new Array();
if (natureID == "insideshopping")
{
	var tmp = natureID.replace("inside", "");
	natureID = tmp; 
}
//window.status = "natureID: "+natureID+"  :  terminalID: "+terminalID+"  :  catID: "+catID;

var urlSplit = location.href.split('/');
var brandID = urlSplit[urlSplit.length-1].split('.')[0];

var xmlStatus = new Array();
var xmlList = new Array();
var titleObj = new Object;
var titleGroupObj = new Object;
var titleCatObj = new Object; //modified on 2009 02

var shopSectArray = new Array('shopping', 'dining', 'entertainment');

var nature = shopSectArray[0];
var term = 'all'; //modified on 2008 12 - allow to search for all shops
var cat = 'all';
var brand = '';

//loadXML('brand.xml', brandXMLHandler)
//loadXML('shop.xml', shopXMLHandler)

function genAllObj()
{
	/*if(xmlList[1])
	{
		genTitle(xmlList[1]);
	}*/
	if(xmlList[0])
	{
		genTitle(xmlList[0]);
		genObj(xmlList[0]);
	}
	if(d.getElementById('terminalGroup'))
	{
		genShopSearch();
	}
}

function genObj()
{
}

//init multi xml handling
function multiXMLHandler(x, i)
{
	xmlReady(x, i)
}

//for brand detail xml handling
/*function brandXMLHandler(x)
{
	genBrandDetail(x);
}*/

//for shop detail xml handling
/*function shopXMLHandler(x, tid, sid)
{
	genShopDetail(x, tid, sid);
}*/

// urls == array of xml s
//e.g. loadXMLList('abc.xml', 'def.xml');
function loadXMLList()
{
	var urls = loadXMLList.arguments;
	/*for (var i=0; i<urls.length; i++)
	{
		xmlStatus[i] = false;
	}
	for (var i=0; i<urls.length; i++)
	{
		loadXML(urls[i], multiXMLHandler, i);
	}
	*/
	xmlStatus[0] = false;
	if(urls[0].search('shops.xml') > 0)
	{
		urls[0] = urls[0].replace("shops.xml","shops_map.xml");
	}
	loadXML(urls[0], multiXMLHandler, 0);
}

function xmlReady(xml, index)
{
	xmlStatus[index] = true;
	xmlList[index] = xml;
	var xmlDone = true;
	for (var i=0; i<xmlStatus.length; i++)
	{
		if (!(xmlStatus[i]))
		{
			xmlDone = false;
		}
	}
	if (xmlDone)
	{
		genAllObj();
	}
}

function loadXML(url, handler, i)
{
//alert(handler);
	var x;
	if (!i) i=0;
	if (window.XMLHttpRequest) // Mozilla, Safari,...
	{
		x = new XMLHttpRequest();
		if (x.overrideMimeType)	x.overrideMimeType('text/xml');
	}
	else if (window.ActiveXObject) // IE
	{
		try
		{
			x = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				x = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e)	{}
		}
	}
	if (x)
	{
		x.onreadystatechange = function()
			{
				if (x.readyState == 4 && x.status == 200)
					{
						handler(x, i);
					}
			}
		x.open('GET', url, true);
		x.send(null);
	}
}

function loadShopXML(url, handler, i, sid)
{

//alert(handler);

	var x;

	if (!i) i=0;

	if (window.XMLHttpRequest) // Mozilla, Safari,...

	{

		x = new XMLHttpRequest();

		if (x.overrideMimeType)	x.overrideMimeType('text/xml');

	}

	else if (window.ActiveXObject) // IE

	{

		try

		{

			x = new ActiveXObject("Msxml2.XMLHTTP");

		}

		catch (e)

		{

			try

			{

				x = new ActiveXObject("Microsoft.XMLHTTP");

			}

			catch (e)	{}

		}

	}

	

	if (x)

	{

		x.onreadystatechange = function()

			{

				if (x.readyState == 4 && x.status == 200)

					{

						handler(x, i, sid);

					}

			}

		x.open('GET', url, true);

		x.send(null);

	}

}





function genTitle(x)

{

	var root = x.responseXML.getElementsByTagName('titleGroup').item(0).childNodes;

	for (var i=0; i<root.length; i++)

	{

		var name = root.item(i).nodeName;

		var titles = root.item(i).childNodes;

		titleGroupObj[name] = new Object();

		

		for (var j=0; j<titles.length; j++)

		{

			if (titles.item(j).firstChild)

			{

				var id = titles.item(j).attributes.getNamedItem("id").value.toString();

				//modified on 2009 02
				if(name=='categoryGroup'){
					var cata = titles.item(j).attributes.getNamedItem("cat").value.toString();
					titleCatObj[id] = cata;
				}
				
				titleObj[id] = titles.item(j).firstChild.data;
				titleGroupObj[name][id] = titles.item(j).firstChild.data;

			}

		}

	}

}





function checkTitle(name)

{

	return titleObj[name];

}





function changeShopBtn(sect)
{
	nature = sect;
	for (var i in shopSectArray)
	{
		var btn = d.getElementById((shopSectArray[i]+'Btn'));

		if (shopSectArray[i] == sect)
		{
			btn.src = path + '/img/shopping/btn_'+shopSectArray[i]+'_over.gif';
			btn.clicked = true;
		}
		else
		{
			btn.src = path + '/img/shopping/btn_'+shopSectArray[i]+'.gif';
			btn.clicked = false;
		}
	}

	var o = d.getElementById('terminalGroup');
	o.options.length = 1;
	o = d.getElementById('categoryGroup');
	o.options.length = 1;
	o = d.getElementById('insideCategoryGroup'); //modified on 2009 02
	o.options.length = 1;
	o = d.getElementById('brandGroup');
	o.options.length = 1;

	cat = 'all'; //modified 2008 12 - allow to search for all shops
	term = 'all'; //modified 2008 12 - allow to search for all shops
	setComboBox('terminalGroup');
}





var searchTid = 0;

var searchCid = 0;

var searchBid = 0;



function setComboBox(id)
{
	var list = genFinderData(xmlList[0], id);
	var o = d.getElementById(id);
	o.options.length = 1;

	if (id == 'brandGroup')
	{
		list.sort(
			function(a, b)
			{
			  if (a.name < b.name) {return -1}
			  if (a.name > b.name) {return 1}
			  return 0; 
			}
		);

		for (var j in list)
		{
			var i = list[j].brand;
			var isSame = false;

			for (var k=0; k<o.options.length; k++)
			{
				if(o.options[k].value == i)
				{
					isSame = true;
					break;
				}
			}
			if (!isSame)	o.options.add(new Option(titleGroupObj[id][i], i));
		}
	}
	else if(id=='terminalGroup')
	{
		o.options.add(new Option("All", "all"));
		for (var i in list)
		{	
			if(i!='') {
				o.options.add(new Option(titleGroupObj[id][i], i));
			}
		}
		o.options.add(new Option("Restricted Area", "ra"));
		o.options.add(new Option("Non-restricted Area", "na"));
		setCatComboBox('categoryGroup');
		setComboBox('brandGroup');
	}
	else
	{
		for (var i in list)
		{
			o.options.add(new Option(titleGroupObj[id][i], i));
		}
	}
}

function setCatComboBox(id)
{
	var list = genFinderData(xmlList[0], id);
	var o = d.getElementById(id);
	o.options.length = 1;
	o.options.add(new Option("All", "all")); //modified on 2009 03 17

	for (var i in titleGroupObj[id])
	{
		if (!(list[i])) continue;
			
		var titles = titleGroupObj[id][i].split('、');
			
		for (var ti in titles)
		{
			o.options.add(new Option(titles[ti], i));
		}
		//o.options.add(new Option(titleGroupObj[id][i], i));
	}
}

function genShopSearch()
{
	var obj = titleGroupObj;
	setComboBox('terminalGroup');
}

function selectTerminalGroup(item)
{
	term = item.value;
	cat = 'all';
	brand = '';

	if (term == '')
	{
		term = 'all';
	}

	setCatComboBox('categoryGroup');
	setComboBox('brandGroup');
}

function selectCategoryGroup(item)
{
	cat = item.value;
	
	if(cat =='')
	{
		cat = 'all';
	}
	setComboBox('brandGroup');
}

function selectBrandGroup(item)
{
	brand = item.value;
}

function submitFinder()
{
	if (term == '') return;

	//modified on 2008 12 - allow to search for all shops
	if (cat == 'all' || cat == '')
	{
		if (brand != '')
		{
			cat = searchCat(xmlList[0], brand);
		}else
		{
			return;
		}
	}

	if (brand == '') return;

	if (nature == "shopping")	var natLink = "insideshopping";	else	natLink = nature;

	//modified on 2009 02 - to deal with Entertainment
	if(nature == "entertainment")
		term = 't2';
	
	if (term == 'ra' || term == 'na') {
		location.href = path + 'shopping/'+natLink+'/'+getTermByBrand(term, brand)+'/'+cat+'/'+brand+'.html';
	} else {
		location.href = path + 'shopping/'+natLink+'/'+term+'/'+cat+'/'+brand+'.html';
	}

}


//modified on 2008 12 - allow to search for all shops
function searchCat(x, brandID)
{
	var root = x.responseXML.getElementsByTagName('shopGroup').item(0);
	
	var shops = root.getElementsByTagName('shop');
	var list = new Array();
	
	for (var i=0; i<shops.length; i++)
	{
		var cid = shops.item(i).getElementsByTagName('category').item(0).attributes.getNamedItem("id").value;
		var bid = shops.item(i).getElementsByTagName('brand').item(0).attributes.getNamedItem("id").value;
	
		if(brandID==bid)
		{
			if(cid.indexOf(',')>0)
			{	
				var cate = cid.split(',');
				for(var j=0;j<cate.length;j++)
				{	
					if(nature == titleCatObj[cate[j]])
					{
						cid = cate[j];
						break;
					}
				}
			}
						
			return cid;
		}
	}
	return '';
}


//function genFinderData(x, groupid)

function genFinderData(x, groupid)
{
	var root = x.responseXML.getElementsByTagName('shopGroup').item(0);
	var shops = root.getElementsByTagName('shop');
	var list = new Array();
	var str = '';

	for (var i=0; i<shops.length; i++)
	{
		var id = shops.item(i).attributes.getNamedItem("id").value;
		var nid = shops.item(i).getElementsByTagName('nature').item(0).attributes.getNamedItem("id").value;
		var tid = shops.item(i).getElementsByTagName('terminal').item(0).attributes.getNamedItem("id").value;
		var restricted = shops.item(i).getElementsByTagName('restricted').item(0).firstChild.data;
		var cid = shops.item(i).getElementsByTagName('category').item(0).attributes.getNamedItem("id").value;
		var bid = shops.item(i).getElementsByTagName('brand').item(0).attributes.getNamedItem("id").value;
		var bName = shops.item(i).getElementsByTagName('brand').item(0).attributes.getNamedItem("name").value.toLowerCase();

		//modified on 2009 02
		//if ((nature != nid) && (nid != ''))
		if (!(nid.match(nature)) && (nid != ''))
		{
			continue;
		}

		switch(groupid)
		{
			case 'terminalGroup':
				list[tid] = true;
				break;

			case 'categoryGroup':
				if ((term != tid) && (term != '') && (term != 'all') && (term != 'ra') && (term != 'na')) //modified on 2008 12 - allow to search ALL terminal
				{
					continue;
				}
				/*if(cid.indexOf(',')>0)
				{
					var cate = cid.split(',');
					for(var j=0;j<cate.length;j++)
					{
						if(nature == titleCatObj[cate[j]])
						{
							list[cate[j]] = true;
							break;
						}
					}
				}else
				{*/
				list[cid] = true;
				//}
				break;

			case 'brandGroup':
				if(term =='all' && cat =='all') //modified on 2008 12 - allow to search ALL terminal
				{
					list.push({brand:bid, name:bName});
				} else {
					if (term == 'ra' && restricted != 'Restricted Area') {
						continue;
					}
					if (term == 'na' && restricted != 'Non-restricted Area') {
						continue;
					}
					if (term !='all' && term != 'ra' && term != 'na' && term != tid) {
						continue;
					}
					if ((cat != 'all') && !(cid.match(cat))) {
						continue;
					}
					list.push({brand:bid, name:bName});
				}
				break;
		}
	}
	return list;
}





function genHTMLfile(x)

{

	var root = x.responseXML.getElementsByTagName('shopGroup').item(0);

	var shops = root.getElementsByTagName('shop');	

	var str = '';



	for (var i=0; i<shops.length; i++)

		{

			var id = shops.item(i).attributes.getNamedItem("id").value;

			var tid = shops.item(i).getElementsByTagName('terminal').item(0).attributes.getNamedItem("id").value

			var cid = shops.item(i).getElementsByTagName('category').item(0).attributes.getNamedItem("id").value

			var nid = shops.item(i).getElementsByTagName('nature').item(0).attributes.getNamedItem("id").value

			var bid = shops.item(i).getElementsByTagName('brand').item(0).attributes.getNamedItem("id").value

			

			str += 'xcopy list.html .&#92;'+nid+'&#92;'+tid+'&#92;'+cid+'&#92;list.html /Y';

			str += '<BR>';

			str += 'xcopy src.html .&#92;'+nid+'&#92;'+tid+'&#92;'+cid+'&#92;'+bid+'.html /Y';

			str += '<BR>';

			

			

			str += 'xcopy list.html .&#92;'+nid+'&#92;'+'all'+'&#92;'+cid+'&#92;list.html /Y';

			str += '<BR>';

			str += 'xcopy src.html .&#92;'+nid+'&#92;'+'all'+'&#92;'+cid+'&#92;'+bid+'.html /Y';

			str += '<BR>';

		}

	

	d.write(str);

}


// modified on 2009 02 - to enlarge the droup down when clicked
// Disabling the select box stops the dropdown list happening
var clickDown=false;

function dropdown_mousedown(dropdown, listbox, newFocus)
{
	var focusStr = '';
	dropdown.disabled = true;
	if (!listbox.disabled)
	{
		clickDown = true;
		focusStr = 'document.getElementById("' + dropdown.id + '").focus();'
	} else
	{
		newFocus.focus();
	}
	setTimeout( 'document.getElementById("' + dropdown.id + '").disabled=false;' + focusStr,10);
}

function dropdown_mouseup(dropdown, listbox)
{
	if(!clickDown)
	{
		listbox.style.top=dropdown.offsetHeight + dropdown.offsetTop;
		listbox.style.left=dropdown.offsetLeft;

		listbox.disabled=false;
		for(var i = 0; i< dropdown.length;i++)
		{
			listbox.options[i] = new Option(dropdown.options[i].text,
                                                dropdown.options[i].value,
                                                dropdown.options[i].defaultSelected,
                                                dropdown.options[i].selected);
		}
		listbox.style.display='block';
		listbox.focus();
	} else
	{  
		clickDown = false;
	}
}

function select_click(dropdown, listbox)
{
	dropdown.selectedIndex=listbox.selectedIndex;
	dropdown.focus();
	listbox.style.display='none';
	listbox.length = 0;
	listbox.disabled=true;
}

function select_blur(dropdown, listbox)
{
	listbox.style.display='none';
	listbox.disabled=true;
	if(!dropdown.disabled)
	{
		dropdown.focus();
	}
}

function select_keypress(dropdown, listbox, event)
{
	var charCode;
	if (event.keyCode) 
		charCode = event.keyCode;
	else if (event.which) 
		charCode = event.which;
	if ((charCode == 13)|| (charCode == 32))
	{
		select_click(dropdown, listbox);
	}
}

function findPos(objs)
{
	var obj = d.getElementById(objs);
	var curleft = curtop = 0;
	if (obj.offsetParent)
	{
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
	}
	return [curleft,curtop];
}

function setPos(objs, target)
{
	var obj = d.getElementById(objs);
	obj.style.top = (findPos(target)[1]/2)+'px';
	obj.style.left = ((findPos(target)[0])-130)+'px';
}

var isSupportBrowser = true;
if ((navigator.userAgent.indexOf("MSIE") > -1)||(navigator.userAgent.indexOf("Firefox") > -1)) {
	isSupportBrowser = true;
} else {
	isSupportBrowser = false;
}

function initSortTable(){}

function getTermByBrand(r, brand_id) {
	var rtn = "t1"; // default value;
	
	if (r == "ra") {
		r = "Restricted Area";
	} else if (r == "na") {
		r = "Non-restricted Area";
	}
	
	var root = xmlList[0].responseXML.getElementsByTagName('shopGroup').item(0);
	var shops = root.getElementsByTagName('shop');

	// scan all shops in the xml
	for (var i=0; i<shops.length; i++) {
		var restricted = shops.item(i).getElementsByTagName('restricted').item(0).firstChild.data;
		var bid = shops.item(i).getElementsByTagName('brand').item(0).attributes.getNamedItem("id").value;
		if (restricted == r && bid == brand_id) {
			// get the terminal id
			rtn = shops.item(i).getElementsByTagName('terminal').item(0).attributes.getNamedItem("id").value;
			break;
		}
	}
	
	return rtn;
}

