﻿function RohPackages(){
	var xmlPath = gHost + "xml";
	this.createPackageList = createPackageList;

	/*Table Title*/
	var tableTitle = [];
	tableTitle['en'] = Array('Service','Operates','Duration','Service Included','Code');
	tableTitle['th'] = Array('รายการบริการเอื้องหลวง','วันบริการ','ระยะเวลา','บริการรวม','รหัส');
	
	/*--------------------------------------------------
		Create Packages List
	*/
	function createPackageList(param){
		//init file value
		if(param['flashMsg']){
			var itemFileName = xmlPath + param['itemObj'].toLowerCase() + "-" + param['flashMsg'].toLowerCase() + ".xml";
			if(param['itemObj'].indexOf('http') >= 0){
				var itemFileName = param['itemObj'].toLowerCase() + "-" + param['flashMsg'].toLowerCase() + ".xml";
			}	
		}
		else{
			var itemFileName = xmlPath + param['itemObj'].toLowerCase() + ".xml";
			if(param['itemObj'].indexOf('http') >= 0){
				var itemFileName = param['itemObj'].toLowerCase() + ".xml";
			}
		}	
		$('#' + param['divObj']).html('Loading...');
						
		//get xml data
		$.ajax({
                 type: "GET",
                 url: itemFileName,
                 dataType: "xml",
                 success: function(xmlDoc) {
					 $('#' + param['divObj']).empty();
					 createData(xmlDoc,param);
                 },
				 
				 error: function(){
					 $('#' + param['divObj']).empty();
					 createError(param['divObj'],param['lang']);
				 }
        }); //close $.ajax 
	}
	
	function createData(xmlDoc,param){
		var divObj = param['divObj'];
		var Lang = param['lang'];
		var Msg = param['flashMsg'];
		
		//-----------anchor-----------//
		var anchorId = Msg;	
		$('#' + divObj).append(createAnchor(anchorId));
		
		//-----------Image-----------//
		var divPackageImg = $('<div id="divPackageImg"></div>');
		createImgTitle(xmlDoc,divPackageImg);
		$('#' + divObj).append(divPackageImg);
		
		//-----------Title-----------//
		var divPackageDesc = $('<p id="divPackageDesc"></p>');
		createTitle(param,divPackageDesc)
		$('#' + divObj).append(divPackageDesc);
			
		//-----------packages-----------//
		var divPackages = $('<div id="divPackages"></div>');
		var divRelated;
		var orderCityMain = [];
		var orderCityOptional = [];
		$(xmlDoc).find('items').each(function(){
				var type = $(this).attr('type');
				
				//main
				if(type.toLowerCase() == "main packages"){
					orderCityMain = getPackagesArray(this,Lang);
				}
				
				//optional
				else if(type.toLowerCase() == "optional packages"){
					orderCityOptional = getPackagesArray(this,Lang);
				}
								
				//related link
				else if(type.toLowerCase() == "related links"){
					divRelated = createRelatedLink("Related Links",this);
					//divRelated.append($('<br/>'));
				}

		});
		
		var orderCity = sortCity(orderCityMain, orderCityOptional);
		
		//display package in group of city		
		for(var i=0; i<orderCity.length; i++){
			var newDiv = createTable(orderCity[i].city + ' : Main Packages',orderCity[i].mainPackages,Lang,false);
			if(newDiv)	$('#' + divObj).append(newDiv);
			
			var newDiv = createTable(orderCity[i].city + ' : Optional Packages',orderCity[i].optionalPackages,Lang,true);
			if(newDiv)	$('#' + divObj).append(newDiv);
		}
		
		//if empty
		if(orderCity.length == 0){
			//main packages			
			$(divPackages).append(createEmptyTable("",Lang));
			//$(divPackages).append($('<br/>'));
		}
		
		if(divRelated) divPackages.append(divRelated);
		$('#' + divObj).append(divPackages);
		
		window.location.href = '#' + anchorId;
		focus(scroll);
	}
	
	function createImgTitle(xmlDoc,divPackageImg){
		var img = $(xmlDoc).find('content').attr('img');
		if(img){
			divPackageImg.append(createImgPatern(img));
		}
	}
	
	function createTitle(param,divPackageDesc){
		if(param['listObj']) {
			var listFileName = xmlPath + param['listObj'].toLowerCase() + ".xml";
			if(param['listObj'].indexOf('http') >= 0)	var listFileName = param['listObj'].toLowerCase() + ".xml";
		
			//get xml package data
			$.ajax({
					 type: "GET",
					 url: listFileName,
					 dataType: "xml",
					 success: function(xmlDoc) {
						 var desc = $(xmlDoc).find('headers').find('desc').text();
						 if(desc){
							 $(divPackageDesc).append( $('<span></span>').html(desc) );
						 }
					 },
					 
					 error: function(){
						 //do nothing
					 }
			}); //close $.ajax 

		}
	}
	
	function getPackagesArray(xmlItems,Lang){
		var arrPackage = [];
		var no = 0;
		
		if ($(xmlItems).find('item').length == 0) return arrPackage;
		
		$(xmlItems).find('item').each(function (){
			var arrCity = $(this).find('city').text().split(',');
						
			for(var i=0; i<arrCity.length; i++){
				var city = trim(arrCity[i]);
				if(city == '') city = $(this).find('country').text();
				
				arrPackage[no] = { 			city:		city,
											cityForSort:	GetChar(city,Lang),
											code:		$(this).find('code').text(),
											name:		$(this).find('name').text(),
											sdesc:		$(this).find('sdesc').text(),
											duration:	$(this).find('duration').text(),
											url:		$(this).find('url').text(),
											target:		$(this).find('target').text(),
											status:		$(this).find('status').text(),
											type:		getChild($(this).find('types'),'type'),
											service: 	getChild($(this).find('services'),'service'),
											status: 	getChild($(this).find('statuss'),'status'),
											operates:	$(this).find('operates').text(),
											weight:		$(this).find('weight').text()
								};
				no++;
			}
		});
		
		arrPackage.sort(sortCityAsc);
		return arrPackage;
	}
	
	function sortCity(orderCityMain, orderCityOptional){
		//find total city
		var cities = new Array;
		for (var i=0; i<orderCityMain.length; i++){
			if(!isDuppCity(cities,orderCityMain[i].city)){
				cities.push(orderCityMain[i].city);
			}
		}
		for (var i=0; i<orderCityOptional.length; i++){
			if(!isDuppCity(cities,orderCityOptional[i].city)){
				cities.push(orderCityOptional[i].city);
			}
		}
		
		//group it for each city
		var orderCity = [];
		var no=0;
		for(var i=0; i<cities.length; i++){
						
			orderCity[no] = {
								city:				cities[i],
								mainPackages: 		sortPackagesByType(sortPackagesByWeight(orderCityMain,cities[i])),
								optionalPackages:	sortPackagesByType(sortPackagesByWeight(orderCityOptional,cities[i]))
							}
			no++;
		}
		
		return orderCity;
	}
	
	function sortPackagesByWeight(arrPackages,city){
		var sortPackages = [];
		var no=0;
		
		for(var i=0; i<arrPackages.length; i++){
			if(arrPackages[i].city.toLowerCase() == city.toLowerCase()){
				sortPackages[no] = arrPackages[i];
				no++;
			}
		}
		
		sortPackages.sort(sortWeightDesc);
		return sortPackages;
	}
	
	function sortPackagesByType(arrPackages){
		var sortPackages = [];
		var no=-1;
		var beginPos = 0;
		
		var currWeight = -1;
		for(var i=0; i<arrPackages.length; i++){
			if(currWeight == arrPackages[i].weight){ //sort by type if weight are equal
				var typeValue = getTypeValue(arrPackages[i].type);
				
				if(typeValue < getTypeValue(sortPackages[no].type)){
					//swap position
					var endPos = no;
					for(var j=beginPos; j<=endPos; j++){
						if(typeValue < getTypeValue(sortPackages[j].type)){
							no++;
							
							for(k=no; k>j; k--){
								sortPackages[k] = sortPackages[k-1];
							}
							sortPackages[j] = arrPackages[i];
							break;
						}
					}
				}
				else{
					no++;
					sortPackages[no] = arrPackages[i];
				}
			}
			else{
				no++;
				sortPackages[no] = arrPackages[i];
				currWeight = sortPackages[no].weight;
				beginPos = no;
			}
		}
		
		return sortPackages;
	}
	
	function getTypeValue(packageType){
		var minValue = 999;
		
		for(var i=0; i<packageType.length; i++){
			if(packageType[i].optValue < minValue){
				minValue = packageType[i].optValue;
			}
		}
		return minValue;
	}
	
	function isDuppCity(cities,city){
		for(var i=0; i<cities.length; i++){
			if(city.toLowerCase() == cities[i].toLowerCase()) return true;
		}
		
		return false;
	}
	
	function getChild(xmlParent,type){
		if(type == 'type'){
			var child = [];
			var i=0;
			$(xmlParent).find(type).each(function(){
				child[i] = { optText:	$(this).text(),	optValue:	rohTypeValue[$(this).text()]} //get value from roh-sortvalue.js
				i++;
			});
		}
		else{
			var child = new Array;
			var i=0;
			$(xmlParent).find(type).each(function(){
				child[i] = $(this).text();
				i++;
			});
		}
		
		return child;
	}
	
	function trim(stringToTrim) {
		return stringToTrim.replace(/^\s+|\s+$/g,"");
	}
	
	function sortCityAsc(record1, record2) {
            var value1 = record1.cityForSort.toLowerCase();
            var value2 = record2.cityForSort.toLowerCase();
            if (value1 > value2) return(1);
            if (value1 < value2) return(-1);
            return(0);
    }
	
	function sortWeightDesc(record1, record2) {
            var value1 = record1.weight.toLowerCase();
            var value2 = record2.weight.toLowerCase();
            if (value1 > value2) return(-1);
            if (value1 < value2) return(1);
            return(0);
    }

	function GetChar(word,Lang){
			if(Lang == 'en') return word;
		
			var newWord = "";					
			for(var i=0; i<word.length;i++){
				var ch = word.substring(i,i+1);
				if(isAlphabet(ch)){
					newWord += ch;
				}
			}
			return newWord;
	}
		
	function isAlphabet(ch){
			var ascii = Asc(ch);
			if((ascii>= 3585) && (ascii <= 3630)){
				return true;
			}
			else{
				return false;
			}
	}
		
	function Asc(String)
	{
		return String.charCodeAt(0);
	}
		
	function createTable(Title,arrPackages,Lang,showDesc){
		if(arrPackages.length == 0) return null;
		
		//create div for this box
		var newDiv = $('<div></div>');
		
		//title
		$(newDiv).append($('<span></span>').text(Title));
			
		//tbody
		var newTbl = $('<table></table>').attr({cellSpacing:'0', cellPadding:'0',className:'packages'});
		//title
		var newTr = $('<tr></tr>');
			newTr.append($('<th width="475"></th>').text(tableTitle[Lang][0]));
			newTr.append($('<th width="50"></th>').text(tableTitle[Lang][1]));
			newTr.append($('<th width="140"></th>').text(tableTitle[Lang][2]));
			newTr.append($('<th width="160"></th>').text(tableTitle[Lang][3]));
			newTr.append($('<th width="75"></th>').text(tableTitle[Lang][4]));
		newTbl.append(newTr);
		
		//detail
		var className = "highlight";
		for(var i=0; i<arrPackages.length; i++){
			if(className != "") className = "";		else className = "highlight";
			
			var pTr = createItem(arrPackages[i],className,showDesc);
			if(pTr)	{
				newTbl.append(pTr);
			}
		}
		newDiv.append(newTbl);
				
		return newDiv;
	}
	
	function createItem(package,className,showDesc){
		var code = package.code;
		var name = package.name;
		var sdesc = package.sdesc;
		var operates = package.operates;
		var duration = package.duration;
		var url = package.url;
		var target = package.target;
		
		sdesc = sdesc.replace(/\n/g,'<br>');
						
		var newTr = $('<tr></tr>').attr({className:className});
		
		//name
		if(!showDesc){
			sdesc = null;
		}
		newTr.append(createPackageName(package,name,sdesc,url,target));
		
		//operates
		newTr.append(createItemNode(operates,url,target,null));
		
		//duration
		newTr.append(createItemNode(duration,url,target,null));
		
		//service included
		newTr.append(createServiceIcon(package,null));
		
		//code
		newTr.append(createItemNode(code,url,target,null));
		
		
		return newTr;
	}
	
	function createItemNode(node,url,target,className){
		var newTd = $('<td></td>');
		if(className) newTd.attr({className:className});
		newTd.text(node);
		
		return newTd;
	}
	
	function createPackageName(package,name,sdesc,url,target){
		var mainTd = $('<td></td>').attr({className: 'pk_left'});
		var newTable = $('<table></table>').attr({cellSpacing:'0', cellPadding:'0',className:'package-name'});
		var newTr = $('<tr></tr>');
		if(package.status.length > 0){
			var newTd1 = createStatusIcon(package);
			var newTd2 = $('<td width="395"></td>');
		}
		else{
			var newTd1 = null;
			var newTd2 = $('<td width="475"></td>');
		}
			
		if(url != ""){
			var newLink = $('<a></a>');
			if(isPopup(target)){
				newLink.attr({href: 'javascript: void(0)'});
				newLink.click(function(){
					popupWindow(url,"01",target);
				});
			}
			else{
				newLink.attr({href: url, target: target});
			}
			newLink.append($('<b></b>').html(name));
			if(sdesc)	{
				newLink.append($('<br/>'));
				newLink.append($('<font></font>').html(sdesc));
			}
		}
		else{
			var newLink = $('<font></font>').append($('<b></b>').html(name));
			if(sdesc)	{
				newLink.append($('<br/>'));
				newLink.append($('<font></font>').html(sdesc));
			}
		}
		newTd2.append(newLink);
		
		if(newTd1) newTr.append(newTd1);
		newTr.append(newTd2);
		newTable.append(newTr);
		mainTd.append(newTable);
		
		return mainTd;
	}
	
	function createServiceIcon(package,className){
		var newTd = $('<td></td>').append($('<div></div>').attr({className: 'inline_img'}));
		if(className) newTd.attr({className:className});
		
		for(var i=0; i<package.service.length; i++){
			var newImg = $('<img></img').attr({alt:package.service[i],title:rohServTitle[package.service[i]],src:rohServIcon[package.service[i]]});
			newTd.append(newImg);
		}
		return newTd;
	}
	
	function createStatusIcon(package){		
		var newTd = $('<td width="80"></td>');
		
		for(var i=0; i<package.status.length; i++){
			var newImg = $('<img></img').attr({alt:package.status[i],title:rohStatusTitle[package.status[i]],src:rohStatusIcon[package.status[i]]});
			newTd.append(newImg);
		}
		return newTd;
	}
	
	function createAnchor(anchorID){		
		var newDiv = $('<div id="divAnchor"></div>');
		newDiv.html('<a id="' + anchorID + '"></a>');
		return newDiv;
	}
	
	function createRelatedLink(Title,xmlItems){	
		var newDiv = $('<div></div>');
		
		if($(xmlItems).find('item').length > 0){
			newDiv.append($('<span></span>').text(Title));
			var newLi = $('<ul></ul>');
			$(xmlItems).find('item').each(function(){
				newLi.append(createRelatedNode(this));	
			});
			newDiv.append(newLi);
		}
		
		return newDiv;
	}
	
	function createRelatedNode(xmlItem){
		var url = $(xmlItem).find('url').text();
		var title = $(xmlItem).find('title').text();
		var target = $(xmlItem).find('target').text();
		
		var newLi = $('<li></li>');
		var newLink = $('<a></a>').text(title);
		if(isPopup(target)){
			newLink.attr({href: 'javascript:void(0)'});
			newLink.click(function(){
				popupWindow(url,'related',target);
			});
		}
		else{
			newLink.attr({href: url, target: target});
		}
		newLi.append(newLink);
		return newLi;
	}
	
	function createError(divObj,Lang){
		//anchor
		$('#' + divObj).append(createAnchor('NONE'));
			
		var divPackages = $('<div id="divPackages"></div>');
				
		//main packages			
		$(divPackages).append(createEmptyTable("",Lang));
		//$(divPackages).append($('<br/>'));
			
		$('#' + divObj).append(divPackages);
				
		window.location.href = '#NONE';
		focus(scroll);
	}
	
	function createEmptyTable(Title,Lang){	
		//create div for this box
		var newDiv = $('<div></div>');
		
		//title
		$(newDiv).append($('<span></span>').text(Title));
			
		//tbody
		var newTbl = $('<table></table>').attr({cellSpacing:'0', cellPadding:'0',className:'packages'});
		var newTr = $('<tr></tr>');
			newTr.append($('<th width="475"></th>').text('Package'));
			newTr.append($('<th width="50"></th>').text('Operates'));
			newTr.append($('<th width="140"></th>').text('Duration'));
			newTr.append($('<th width="135"></th>').text('Service Included'));
			newTr.append($('<th width="75"></th>').text('Tour Code'));
		newTbl.append(newTr);
		
		if(Lang == "th"){
			var msg = "ไม่พบแพ็คเกจที่ระบุค่ะ";
		}
		else{
			var msg = "No packages found";
		}
				
		var newTr = $('<tr></tr>').html('<td colspan="5">' + msg + '</td>');
		newTbl.append(newTr);
		newDiv.append(newTbl);
		
		return newDiv;
	}
	
	function createImgPatern(img,width,height,alt,title){
		var pat = '';
		var myImg = img.split(".");

		if(myImg[myImg.length-1] == "swf"){ //for flash
			pat = '<embed src="' + img + '" quality="high"';
			if(width)	pat += ' width="' + width + '"';
			if(height)	pat += ' height="' + height + '"';
			pat += ' swliveconnect=true align="middle" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="transparent"/>';
		}
		else{ //for general image
			pat = '<img src="' + img + '"';
			if(width)	pat += ' width="' + width + '"';
			if(height)	pat += ' height="' + height + '"';
			if(alt)	pat += ' alt="' + alt + '"';
			if(title)	pat += ' title="' + title + '"';
			pat += '></img>';
		}
		
		return pat;
	}
}
