/*
// jQuery effects
$j.easing.bouncy = function (x, t, b, c, d) { 
    var s = 1.70158; 
    if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 
    return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; 
} 
// apply effects to jQuery Tools tooltip
$j.tools.tooltip.addEffect("bouncy", 
 
    // opening animation 
    function(done) { 
        this.getTip().animate({top: '+=15'}, 500, 'bouncy', done).show(); 
    }, 
 
    // closing animation 
    function(done) { 
        this.getTip().animate({top: '-=15'}, 500, 'bouncy', function()  { 
            $(this).hide(); 
            done.call(); 
        }); 
    } 
);
*/
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };
String.prototype.repeat = function(rTimes) { var new_string='';for(i=0;i<rTimes;i++){new_string+=this;}return new_string;};
String.prototype.lpad = function(pad,pLength) { if (this.length>pLength){return this;} else {return pad.repeat(pLength-this.length)+this;}};

function lzeros(number,length) {
	var return_string='';
	var num_digits = Math.floor(Math.log(number)/Math.log(10)) + 1;
	while (num_digits<length) {
		return_string += '0';
		num_digits += 1;
	}
	return_string += number;
	return return_string;
}

function pogoPost (url,data,success,dataType) {
	$j.ajax({
	  type: 'POST',
	  url: url,
	  data: data,
	  success: success,
	  dataType: dataType
	});
}

function recordAdClick(ad_id) {
	$j.post('/ads/recordAdClick.php',{ad_id:ad_id,language:GB_Language},process_recordAdClick,"json");
}

function process_recordAdClick(return_data) {
}

var $htmlTagPattern = /\<(\/?[^\>]+)\>/mg;
var $listEndPattern = /\<\/li\s*[^\>]*\>\s*\<li\s*[^\>]*\>/mg;

// Return the body of a function
Function.prototype.getBody =
  function() {
    // Get content between first { and last }
    var m = this.toString().match(/\{([\s\S]*)\}/m)[1];
    // Strip comments
    return m.replace(/^\s*\/\/.*$/mg,'').replace(/^\s*/mg,'').replace(/\s*$/mg,'').replace(/\s*;+\s*/mg,';');
};

// JavaScript Document
function stopEventPropagation(evt) {
    if (!evt) { evt = window.event; }
    evt.cancelBubble = true;
    if (evt.stopPropagation) evt.stopPropagation();
}

function stringToBoolean (string) {
	switch(string.toLowerCase()){
			case "true": case "yes": case "1": return true;
			case "false": case "no": case "0": case null: return false;
			default: return Boolean(string);
	}
}

function getColor(target,color_type) {
	var color_value = target.css(color_type);
	return stringToRGBHex(color_value).replace(/^#/,'');
}

function getDegrees(s_degree,c_left,c_top,s_left,s_top,e_left,e_top) {
	var radian_1 = Math.atan2((s_top-c_top),(c_left-s_left));
	var radian_2 = Math.atan2((e_top-c_top),(c_left-e_left));
	var degrees = parseInt((180/Math.PI)*(radian_1-radian_2))+s_degree;
	if ($j.isNumeric(degrees)) {
		degrees = degrees%360;
		if (degrees<0) {degrees +=360;}
	}
	return degrees;
}

function stringToRGBHex(color) {
	color = color.toLowerCase().trim();
	if (color.match(/^#/)) {
        return color.toUpperCase();
	} else if (color =='' || color=='transparent') {
		return '';
	} else if (color.match(/^rgb\((\d+),\s*?(\d+),\s*?(\d+)\)$/)) {
		color = color.replace(/\s*/mg,'').replace(/^rgb\(/,'').replace(/\)$/,'');
		var rgbarray = color.split(',');
		var red = parseInt(rgbarray[0]);
		var green = parseInt(rgbarray[1]);
		var blue = parseInt(rgbarray[2]);
		var rgb = blue | (green << 8) | (red << 16);
		return '#' + rgb.toString(16).lpad('0',6).toUpperCase();
	} else {
        return '#'+color;
    }
}

function rgb2hsb (rgb) {
	var hsb = {
		h: 0,
		s: 0,
		b: 0
	};
	var min = Math.min(rgb.r, rgb.g, rgb.b);
	var max = Math.max(rgb.r, rgb.g, rgb.b);
	var delta = max - min;
	hsb.b = max;
	if (max != 0) {
		
	}
	hsb.s = max != 0 ? 255 * delta / max : 0;
	if (hsb.s != 0) {
		if (rgb.r == max) {
			hsb.h = (rgb.g - rgb.b) / delta;
		} else if (rgb.g == max) {
			hsb.h = 2 + (rgb.b - rgb.r) / delta;
		} else {
			hsb.h = 4 + (rgb.r - rgb.g) / delta;
		}
	} else {
		hsb.h = -6;
	}
	hsb.h *= 60;
	if (hsb.h < 0) {
		hsb.h += 360;
	}
	hsb.s *= 100/255;
	hsb.b *= 100/255;
	return hsb;
}
function hsb2rgb (hsb) {
	var rgb = {};
	var h = Math.round(hsb.h);
	var s = Math.round(hsb.s*255/100);
	var v = Math.round(hsb.b*255/100);
	if(s == 0) {
		rgb.r = rgb.g = rgb.b = v;
	} else {
		var t1 = v;
		var t2 = (255-s)*v/255;
		var t3 = (t1-t2)*(h%60)/60;
		if(h==360) h = 0;
		if(h<60) {rgb.r=t1;	rgb.b=t2; rgb.g=t2+t3}
		else if(h<120) {rgb.g=t1; rgb.b=t2;	rgb.r=t1-t3}
		else if(h<180) {rgb.g=t1; rgb.r=t2;	rgb.b=t2+t3}
		else if(h<240) {rgb.b=t1; rgb.r=t2;	rgb.g=t1-t3}
		else if(h<300) {rgb.b=t1; rgb.g=t2;	rgb.r=t2+t3}
		else if(h<360) {rgb.r=t1; rgb.g=t2;	rgb.b=t1-t3}
		else {rgb.r=0; rgb.g=0;	rgb.b=0}
	}
	return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};
}
function rgb2hex (rgb) {
	var hex = [
		rgb.r.toString(16),
		rgb.g.toString(16),
		rgb.b.toString(16)
	];
	$j.each(hex, function (nr, val) {
		if (val.length == 1) {
			hex[nr] = '0' + val;
		}
	});
	return hex.join('').toUpperCase();
}

function dec2hex(d, padding) {
    var hex = Number(d).toString(16);
    padding = typeof (padding) === "undefined" || padding === null ? padding = 2 : padding;

    while (hex.length < padding) {
        hex = "0" + hex;
    }

    return hex.toUpperCase();
}

function hex2rgb (hex) {
	if (hex==null || (hex.length!=3 && hex.length!=6)) {
		return {r:0,g:0,b:0};
	} else if (hex.length==3) {
		return {r:parseInt(hex.substr(0,1)+hex.substr(0,1),16),g:parseInt(hex.substr(1,1)+hex.substr(1,1),16),b:parseInt(hex.substr(2,1)+hex.substr(2,1),16)}
	} else {
		return {r:parseInt(hex.substr(0,2),16),g:parseInt(hex.substr(2,2),16),b:parseInt(hex.substr(4,2),16)}
	}
}

function hsb2hex (hsb) {
	return rgb2hex(hsb2rgb(hsb));
}

// Adapted from getPageScroll() by quirksmode.com
function getPageScroll() {
    var xScroll, yScroll;
    if (self.pageYOffset) {
      yScroll = self.pageYOffset;
      xScroll = self.pageXOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {
      yScroll = document.documentElement.scrollTop;
      xScroll = document.documentElement.scrollLeft;
    } else if (document.body) {// all other Explorers
      yScroll = document.body.scrollTop;
      xScroll = document.body.scrollLeft;
    }
    return {left:xScroll,top:yScroll}
}

// Adapted from getPageSize() by quirksmode.com
function getPageHeight() {
    var windowHeight
    if (self.innerHeight) { // all except Explorer
      windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
      windowHeight = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
      windowHeight = document.body.clientHeight;
    }
    return windowHeight
}

function j_rotation(target_object,degrees) {
	if (degrees) {
		target_object.css({'transform':'rotate('+degrees+'deg)','-moz-transform':'rotate('+degrees+'deg)','-webkit-transform':'rotate('+degrees+'deg)','-o-transform':'rotate('+degrees+'deg)','-ms-transform':'rotate('+degrees+'deg)','css-transform':'rotate('+degrees+'deg)'});
		return degrees;
	} else {
		var style_string=target_object.attr('style');
		if (style_string) {
			if (style_string.match(/rotate/)) {
				style_string = style_string.replace(/.*rotate.*\(\D*([\d]+\.?[\d]*)\D*\).*/,'$1');
				return parseFloat(style_string);
			} else {
				return 0;
			}
		} else {
			return 0;
		}
	}
}

function convert_latin(evt) {
	var target_object = get_target(evt);
	var new_string = target_object.val().replace(/\057\077/g,'¿').replace(/\057\041/g,'¡').replace(/\057`A/g,'À').replace(/\057'A/g,'Á').replace(/\057\136A/g,'Â').replace(/\057~A/g,'Ã').replace(/\057:A/g,'Ä').replace(/\057\056A/g,'Å').replace(/\057AE/g,'Æ').replace(/\057,C/g,'Ç').replace(/\057`E/g,'È').replace(/\057'E/g,'É').replace(/\057\136E/g,'Ê').replace(/\057:E/g,'Ë').replace(/\057`I/g,'Ì').replace(/\057'I/g,'Í').replace(/\057\136I/g,'Î').replace(/\057:I/g,'Ï').replace(/\057\055D/g,'Ð').replace(/\057~N/g,'Ñ').replace(/\057`O/g,'Ò').replace(/\057'O/g,'Ó').replace(/\057\136O/g,'Ô').replace(/\057~O/g,'Õ').replace(/\057:O/g,'Ö').replace(/\057\057O/g,'Ø').replace(/\057OE/g,'Œ').replace(/\057`U/g,'Ù').replace(/\057'U/g,'Ú').replace(/\057\136U/g,'Û').replace(/\057:U/g,'Ü').replace(/\057'Y/g,'Ý').replace(/\057\174P/g,'Þ').replace(/\057ss/g,'ß').replace(/\057SS/g,'ß');
	new_string = new_string.replace(/\057`a/g,'à').replace(/\057'a/g,'á').replace(/\057\136a/g,'â').replace(/\057~a/g,'ã').replace(/\057:a/g,'ä').replace(/\057\056a/g,'å').replace(/\057ae/g,'æ').replace(/\057,c/g,'ç').replace(/\057`e/g,'è').replace(/\057'e/g,'é').replace(/\057\136e/g,'ê').replace(/\057:e/g,'ë').replace(/\057`i/g,'ì').replace(/\057'i/g,'í').replace(/\057\136i/g,'î').replace(/\057:i/g,'ï').replace(/\057\055d/g,'ð').replace(/\057~n/g,'ñ').replace(/\057`o/g,'ò').replace(/\057'o/g,'ó').replace(/\057\136o/g,'ô').replace(/\057~o/g,'õ').replace(/\057:o/g,'ö').replace(/\057\057o/g,'ø').replace(/\057oe/g,'œ').replace(/\057`u/g,'ù').replace(/\057'u/g,'ú').replace(/\057\136u/g,'û').replace(/\057:u/g,'ü').replace(/\057'y/g,'ý').replace(/\057\174p/g,'þ').replace(/\057:y/g,'ÿ');
	new_string = new_string.replace(/\057\061\057\062/g,'½').replace(/\057\061\057\064/g,'¼').replace(/\057\063\057\064/g,'¾').replace(/\057\075E/g,'€').replace(/\057\075e/g,'€').replace(/\057\075Y/g,'¥').replace(/\057\075y/g,'¥').replace(/\057\055L/g,'£').replace(/\057\055l/g,'£').replace(/\057\174C/g,'¢').replace(/\057\174c/g,'¢').replace(/\057CO/g,'©').replace(/\057co/g,'©').replace(/\057TM/g,'™').replace(/\057tm/g,'™').replace(/\057\056\056/g,'°');
	target_object.val(new_string);
}

function update_text_count(text_object,count_object,max_length) {
	var text_string;
	if (text_object==null) {
		count_object.text('('+max_length+')');
		return
	}
	if (typeof(text_object)=='object') {
		text_string=text_object.val();
	} else if (typeof(text_object)=='string') {
		text_string=text_object;
	} else {
		return
	}
	var chars_left = max_length - count_unicode_length(text_string);
	count_object.text('('+chars_left+')');
	if (chars_left<0) {
		count_object.addClass('alertWords');
	} else {
		count_object.removeClass('alertWords');
	}
	if (typeof(text_object)=='object' && chars_left<0) {
		text_object.addClass('invalidInput');
	} else if (typeof(text_object)=='object' && chars_left>=0) {
		text_object.removeClass('invalidInput');
	}
}

function change_language_browser_buttons () {
	$j('#browserLang_en').attr('title',get_language_string('en',GB_Language));
	$j('#browserLang_tw').attr('title',get_language_string('tw',GB_Language));
	$j('#browserLang_cn').attr('title',get_language_string('cn',GB_Language));
	$j('#browserLang_ja').attr('title',get_language_string('ja',GB_Language));
	$j('#browserLang_ko').attr('title',get_language_string('ko',GB_Language));
	$j('#browserLang_fr').attr('title',get_language_string('fr',GB_Language));
	$j('#browserLang_de').attr('title',get_language_string('de',GB_Language));
	$j('#browserLang_es').attr('title',get_language_string('es',GB_Language));
	switch (GB_Language) {
		case 'tw':
			$j('#browserLang_ko').insertBefore('#browserLangBtns>br');
			$j('#browserLang_ja').insertBefore('#browserLang_ko');
			$j('#browserLang_cn').insertBefore('#browserLang_ja');
			$j('#browserLang_tw').insertBefore('#browserLang_cn'); 
			$j('#browserLang_es').insertAfter('#browserLangBtns>br');
			$j('#browserLang_de').insertBefore('#browserLang_es');
			$j('#browserLang_fr').insertBefore('#browserLang_de');
			$j('#browserLang_en').insertBefore('#browserLang_fr');
			break;
		case 'cn':
			$j('#browserLang_ko').insertBefore('#browserLangBtns>br');
			$j('#browserLang_ja').insertBefore('#browserLang_ko');
			$j('#browserLang_tw').insertBefore('#browserLang_ja');
			$j('#browserLang_cn').insertBefore('#browserLang_tw'); 
			$j('#browserLang_es').insertAfter('#browserLangBtns>br');
			$j('#browserLang_de').insertBefore('#browserLang_es');
			$j('#browserLang_fr').insertBefore('#browserLang_de');
			$j('#browserLang_en').insertBefore('#browserLang_fr');
			break;
		case 'ja':
			$j('#browserLang_ko').insertBefore('#browserLangBtns>br');
			$j('#browserLang_cn').insertBefore('#browserLang_ko');
			$j('#browserLang_tw').insertBefore('#browserLang_cn');
			$j('#browserLang_ja').insertBefore('#browserLang_tw'); 
			$j('#browserLang_es').insertAfter('#browserLangBtns>br');
			$j('#browserLang_de').insertBefore('#browserLang_es');
			$j('#browserLang_fr').insertBefore('#browserLang_de');
			$j('#browserLang_en').insertBefore('#browserLang_fr');
			break;
		case 'ko':
			$j('#browserLang_ja').insertBefore('#browserLangBtns>br');
			$j('#browserLang_cn').insertBefore('#browserLang_ja');
			$j('#browserLang_tw').insertBefore('#browserLang_cn');
			$j('#browserLang_ko').insertBefore('#browserLang_tw'); 
			$j('#browserLang_es').insertAfter('#browserLangBtns>br');
			$j('#browserLang_de').insertBefore('#browserLang_es');
			$j('#browserLang_fr').insertBefore('#browserLang_de');
			$j('#browserLang_en').insertBefore('#browserLang_fr');
			break;
		case 'fr':
			$j('#browserLang_es').insertBefore('#browserLangBtns>br');
			$j('#browserLang_de').insertBefore('#browserLang_es');
			$j('#browserLang_en').insertBefore('#browserLang_de');
			$j('#browserLang_fr').insertBefore('#browserLang_en'); 
			$j('#browserLang_ko').insertAfter('#browserLangBtns>br');
			$j('#browserLang_ja').insertBefore('#browserLang_ko');
			$j('#browserLang_cn').insertBefore('#browserLang_ja');
			$j('#browserLang_tw').insertBefore('#browserLang_cn'); 
			break;
		case 'de':
			$j('#browserLang_es').insertBefore('#browserLangBtns>br');
			$j('#browserLang_fr').insertBefore('#browserLang_es');
			$j('#browserLang_en').insertBefore('#browserLang_fr');
			$j('#browserLang_de').insertBefore('#browserLang_en'); 
			$j('#browserLang_ko').insertAfter('#browserLangBtns>br');
			$j('#browserLang_ja').insertBefore('#browserLang_ko');
			$j('#browserLang_cn').insertBefore('#browserLang_ja');
			$j('#browserLang_tw').insertBefore('#browserLang_cn'); 
			break;
		case 'es':
			$j('#browserLang_de').insertBefore('#browserLangBtns>br');
			$j('#browserLang_fr').insertBefore('#browserLang_de');
			$j('#browserLang_en').insertBefore('#browserLang_fr');
			$j('#browserLang_es').insertBefore('#browserLang_en'); 
			$j('#browserLang_ko').insertAfter('#browserLangBtns>br');
			$j('#browserLang_ja').insertBefore('#browserLang_ko');
			$j('#browserLang_cn').insertBefore('#browserLang_ja');
			$j('#browserLang_tw').insertBefore('#browserLang_cn'); 
			break;
		case 'en': default: 
			$j('#browserLang_es').insertBefore('#browserLangBtns>br');
			$j('#browserLang_de').insertBefore('#browserLang_es');
			$j('#browserLang_fr').insertBefore('#browserLang_de');
			$j('#browserLang_en').insertBefore('#browserLang_fr');
			$j('#browserLang_ko').insertAfter('#browserLangBtns>br');
			$j('#browserLang_ja').insertBefore('#browserLang_ko');
			$j('#browserLang_cn').insertBefore('#browserLang_ja');
			$j('#browserLang_tw').insertBefore('#browserLang_cn'); 
			break;
	}
}

var $dialogCtrl = {};
var $pluginCtrl = [];
var $sliderNames = {}, $sliderValues = {};
var $dialogName;
function setup_dialog(post_data) {
	$dialogName = post_data.dialog;
	if (!post_data['open']) {
		post_data['open']='Y';
	}
	var dialog_name = $dialogName;
	if (typeof $dialogCtrl[dialog_name]=='undefined') {
		$j('#infoMsgDialog').dialog('option','title',$defaultText['loading']);
		show_loading_in_dialog('#infoMsgDialog');
		$j('#infoMsgDialog').dialog('open');
		post_data['load_options']='Y';
		post_data['plugin_ctrl']=$pluginCtrl;
		pogoPost('/dialogs/getDialogs.php',post_data,process_get_dialog,'json');
	} else if ($dialogCtrl[dialog_name]!=GB_Language) {
		// get dialog contents only because the dialog box is already loaded
		$j(dialog_name).dialog('option','title',$defaultText['loading']);
		show_loading_in_dialog(dialog_name);
		$j(dialog_name).dialog('open');
		post_data['load_options']='N';
		post_data['plugin_ctrl']=$pluginCtrl;
		pogoPost('/dialogs/getDialogs.php',post_data,process_get_dialog_text, "json");
	} else {
		$j(dialog_name).data(post_data.data);
		if (post_data.post_load_func) {
			if (post_data.post_load_args) {
				window[post_data.post_load_func].apply(this,post_data.post_load_args);
			} else {
				window[post_data.post_load_func].apply();
			}
		}
		if (post_data.data!=null) {
			if (post_data.data.hideCaller) {
				if ($j(post_data.data.caller).is(':visible')) {$j(post_data.data.caller).hide('blind',{},500)};
			}
		}
		if (post_data['open']=='Y') {
			if ($j(dialog_name).is(':hidden')) {
				$j(dialog_name).show();
			}
			$j(dialog_name).dialog('open');
		}
	}
}

function process_get_dialog(return_data) {
	var dialog_object = return_data[$dialogName];
	var dialog_name = dialog_object['dialog_name'];

	// load plugin scripts and css
	var j_index = 0;
	var plugin_object,plugin_id,plugin_script;
	while (j_index<dialog_object['plugins'].length) {
		plugin_object = dialog_object['plugins'][j_index];
		plugin_id = plugin_object['id'];
		if ($j.inArray(plugin_id,$pluginCtrl)==-1) {
//			window.alert('plugid ID:'+plugin_id+','+plugin_object['script']);
			$j('body').append(plugin_object['script']+plugin_object['css']);
			// load additional plug functions
			var k_index = 0;
			var function_object;
			while (k_index<plugin_object['functions'].length) {
				function_object = plugin_object['functions'][k_index];
				if (!$j.isFunction(window[function_object['name']])) {
					window[function_object['name']] = new Function (function_object['body']);
				}
				k_index += 1;
			}
			$pluginCtrl.push(plugin_id);
		}
		j_index += 1;
	}
	
	// construct dialog if this is the first time the dialog is called, first add the dialog frame to the DOM
	if ($j(dialog_name).length==0) {
		$j('body').append('<div id="'+dialog_name.substring(1)+'" style="background-color:#EFE;display:none"></div>');
	}
	// add events to the options object
	var j_index = 0;
	var event_object;
	while (j_index<dialog_object['events'].length) {	
		event_object = dialog_object['events'][j_index];
		dialog_object['options'][event_object['event']] =new Function ("event","ui",event_object['body']);
		j_index += 1;
	}
	// add CSS for dialog
	if (dialog_object['css']!=null && dialog_object['css']!='') {
		$j('body').append(dialog_object['css']);
	}
	
	// create functions if they have not already been defined
	var j_index = 0;
	var function_object;
	while (j_index<dialog_object['functions'].length) {
		function_object = dialog_object['functions'][j_index];
		if (!$j.isFunction(window[function_object['name']])) {
			window[function_object['name']] = new Function (function_object['body']);
		}
		j_index += 1;
	}
	// initialise the dialog
	$j(dialog_name).dialog(dialog_object['options']);
	// when dialog is closed, reopen the caller if it was closed
	$j(dialog_name).data(dialog_object.data);	
	// temporary fix
	process_get_dialog_text(return_data);
	$j('#infoMsgDialog').dialog('close');
	if (dialog_object['open']=='Y') {
		if (dialog_object.data!=null) {
			if (dialog_object.data.hideCaller) {
				if ($j(dialog_object.data.caller).is(':visible')) {$j(dialog_object.data.caller).hide('blind',{},500)};
			}
		}
		$j(dialog_name).dialog('open');
	}
}

function process_get_dialog_text(return_data) {
	var dialog_object = return_data[$dialogName];
	var dialog_name = dialog_object['dialog_name'];
	$dialogCtrl[dialog_name]=GB_Language;
	$j(dialog_name).html(dialog_object['contents']);
	$j(dialog_name).dialog('option','title',dialog_object['title']); 
	
	var j_index = 0;
	var button_object = new Object;
	while (j_index<dialog_object['buttons'].length) {
		button_object[dialog_object['buttons'][j_index]['button']] = new Function ("event","ui",dialog_object['buttons'][j_index]['body']);
		j_index += 1;
	}
	$j(dialog_name).dialog('option','buttons',button_object); 
	
	var init_func = new Function (dialog_object['init_func']+';'+dialog_object['slider_init']);
	init_func();
	$sliderNames[dialog_name]=dialog_object['slider_names'];
	$sliderValues[dialog_name]=dialog_object['slider_values'];
	
	if (dialog_object['post_load_func']) {
		if (dialog_object['post_load_args']) {
			window[dialog_object['post_load_func']].apply(this,dialog_object['post_load_args']);
		} else {
			window[dialog_object['post_load_func']].apply();
		}
	}
}

function show_loading_in_dialog(dialog_id) {
	$j(dialog_id).html('<div style="margin:16px auto 0px"><h3 class="hiliteWords">'+$labelText['please_wait']+'</h3><img src="/images/blue_circles.gif" class="topMargin16 largeIcon" /></div>');
}

function show_loading_in_dialog_btn(dialog_id) {
	$j(dialog_id).nextAll('.ui-dialog-buttonpane').append('<img src="/images/blue_circles.gif" class="fltrt largeIcon" />').find('.ui-button').hide();
}

function hide_loading_in_dialog_btn(dialog_id) {
	$j(dialog_id).nextAll('.ui-dialog-buttonpane').find('.ui-button').show().siblings('img').remove();
}

function convert_tel(evt,country) {
	var target_object = get_target(evt);
	// strip out any characters not between 0-9
	var new_tel = target_object.val().replace(/[^0-9]+/g,'');
	if (new_tel.length>0) {
		switch (country) {
			case 'ca': case 'us':
				new_tel = new_tel.slice(0,3)+' '+new_tel.slice(3,7);
				break;
			case 'sg': case 'hk': case 'au': case 'uk': case 'tw': case 'cn':
				new_tel = new_tel.slice(0,4)+' '+new_tel.slice(4,8);
				break;
			case 'fr':
				new_tel = new_tel.slice(0,2)+' '+new_tel.slice(2,4)+' '+new_tel.slice(4,6)+' '+new_tel.slice(6,8);
				break;
			case 'de':
				if (new_tel.length%2==0) {
					new_tel = new_tel.slice(0,2)+' '+new_tel.slice(2,4)+' '+new_tel.slice(4,6)+' '+new_tel.slice(6,8)+' '+new_tel.slice(8,10);
				} else {
					new_tel = new_tel.slice(0,1)+' '+new_tel.slice(1,3)+' '+new_tel.slice(3,5)+' '+new_tel.slice(5,7)+' '+new_tel.slice(7,9);
				}
				break;
		}
	}
	target_object.val(new_tel);
}

function num_move_focus(evt,max_char,next_selector) {
	var target_object = get_target(evt);
	var keycode = evt.keyCode;
	// check for max number of digits only if the key pressed is a number, otherwise stay in focus as the key pressed may have been a navigation key
	if (keycode>=48 && keycode<=57 || keycode>=96 && keycode<=105) {
		// move the focus to the next field if the length of the field after stripping out characters other than 0-9 is the max number of chars
		if (get_target(evt).val().replace(/[^0-9]+/g,'').length>=max_char) {
			$j('#'+next_selector).focus();
		}
	}
}

function count_unicode_length(raw_string) {
	var escapedStr = encodeURI(raw_string);
	if (escapedStr.indexOf("%") != -1) {
		var count = escapedStr.split("%").length - 1;
		if (count == 0) count++;
		var tmp = escapedStr.length - (count * 3);
		count += tmp;
	} else {
		count = escapedStr.length;
	}
	return count;
}

function valid_email_format (email) {
	var email_valid = 0;
	var rx = /^[\w\.-]+@[\w\.-]+\.\w+$/i;
	
	if (email.length>80) {
		email_valid = 1;
	} else if (email.length==0) {
		email_valid = 3;
	} else if (!rx.test(email)) {
		email_valid = 2;
	} else {
		email_valid = 0;
	}
	return email_valid;
}

function setCookie(c_name,value,exdays) {
	var exdate=new Date();
	exdate.setDate(exdate.getDate() + exdays);
	var c_value=escape(value) + ((exdays==null) ? "" : "; expires="+exdate.toUTCString());
	document.cookie=c_name + "=" + c_value;
}

function getCookie(c_name) {
	var i,x,y,ARRcookies=document.cookie.split(";");
	for (i=0;i<ARRcookies.length;i++)
	{
	  x=ARRcookies[i].substr(0,ARRcookies[i].indexOf("="));
	  y=ARRcookies[i].substr(ARRcookies[i].indexOf("=")+1);
	  x=x.replace(/^\s+|\s+$/g,"");
	  if (x==c_name)
		{
		return unescape(y);
		}
	  }
}

function get_viewable_text(language,viewable_code) {
	var viewable_text = '';
	switch (GB_Language) {
		case 'tw':
			switch (viewable_code) {
				case '0': viewable_text='我自己'; break;
				case '1': viewable_text='我的朋友'; break;
				case '5': viewable_text='我的朋友和他們的朋友'; break;
				case '9': viewable_text='所有人'; break;
			}
			break;
		case 'cn':
			switch (viewable_code) {
				case '0': viewable_text='我自己'; break;
				case '1': viewable_text='我的朋友'; break;
				case '5': viewable_text='我的朋友和他们的朋友'; break;
				case '9': viewable_text='所有人'; break;
			}
			break;
		case 'de':
			switch (viewable_code) {
				case '0': viewable_text='Nur ich'; break;
				case '1': viewable_text='Nur meine Freunde'; break;
				case '5': viewable_text='Nur meine Freunde und deren Freunde'; break;
				case '9': viewable_text='Jeder'; break;
			}
			break;
		case 'fr':
			switch (viewable_code) {
				case '0': viewable_text='Moi uniquement'; break;
				case '1': viewable_text='Mes amis uniquement'; break;
				case '5': viewable_text='Mes amis et leurs amis uniquement'; break;
				case '9': viewable_text='Tout le monde'; break;
			}
			break;
		case 'ja':
			switch (viewable_code) {
				case '0': viewable_text='私だけ'; break;
				case '1': viewable_text='私の友たち'; break;
				case '5': viewable_text='私の友人とその人脈'; break;
				case '9': viewable_text='すべての人'; break;
			}
			break;
		case 'ko':
			switch (viewable_code) {
				case '0': viewable_text='본인'; break;
				case '1': viewable_text='내 친구'; break;
				case '5': viewable_text='내 친구와 그 인맥'; break;
				case '9': viewable_text='모두'; break;
			}
			break;
		case 'es':
			switch (viewable_code) {
				case '0': viewable_text='Solamente yo'; break;
				case '1': viewable_text='Solo mis amigos'; break;
				case '5': viewable_text='Solo mis amigos y sus amigos'; break;
				case '9': viewable_text='Todos '; break;
			}
			break;
		case 'en': default:
			switch (viewable_code) {
				case '0': viewable_text='Only me'; break;
				case '1': viewable_text='My friends only'; break;
				case '5': viewable_text='My friends and their friends'; break;
				case '9': viewable_text='Everyone'; break;
			}
			break;
	}
	return viewable_text;
}

function get_time_elapsed_text(time_elapsed) {
	var time_count;
	var time_text;
	if (time_elapsed<60) {
		time_count =  time_elapsed;
		switch (GB_Language) {
			case 'tw': time_text = '不足1分鐘前'; break;
			case 'cn': time_text = '不足1分钟前'; break;
			case 'de': time_text = 'vor weniger als einer Minute'; break;
			case 'fr': time_text = 'il y a moins d\'une minute'; break;
			case 'ja': time_text = '1分未満前'; break;
			case 'ko': time_text = '1분 미만 전'; break;
			case 'es': time_text = 'hace menos de un minuto '; break;
			case 'en': default: time_text = 'less than a minute ago'; break;
		}
	} else if (time_elapsed<60*60) {
		time_count =  Math.floor(time_elapsed/60)
		switch (GB_Language) {
			case 'tw': time_text = time_count+'分鐘前'; break;
			case 'cn': time_text = time_count+'分钟前'; break;
			case 'de': time_text = 'vor '+time_count+(time_count==1?' Minute':' Minuten'); break;
			case 'ja': time_text = time_count+'分前'; break;
			case 'ko': time_text = time_count+'분 전'; break;
			case 'fr': time_text = 'il y a '+time_count+(time_count==1?' minute':' minutes'); break;
			case 'es': time_text = 'hace '+time_count+(time_count==1?' minuto':' minutos'); break;
			case 'en': default: time_text = time_count+(time_count==1?' minute':' minutes')+' ago'; break;
		}
	} else if (time_elapsed<24*60*60) {
		time_count =  Math.floor(time_elapsed/(60*60))
		switch (GB_Language) {
			case 'tw': time_text = time_count+'小時前'; break;
			case 'cn': time_text = time_count+'小时前'; break;
			case 'de': time_text = 'vor '+time_count+(time_count==1?' Stunde':' Stunden'); break;
			case 'ja': time_text = time_count+'時間前'; break;
			case 'ko': time_text = time_count+'시간 전'; break;
			case 'fr': time_text = 'il y a '+time_count+(time_count==1?' heure':' heures'); break;
			case 'es': time_text = 'hace '+time_count+(time_count==1?' hora':' horas'); break;
			case 'en': default: time_text = time_count+(time_count==1?' hour':' hours')+' ago'; break;
		}
	} else if (time_elapsed<7*24*60*60) {
		time_count =  Math.floor(time_elapsed/(24*60*60))
		switch (GB_Language) {
			case 'tw': time_text = time_count+'日前'; break;
			case 'cn': time_text = time_count+'日前'; break;
			case 'de': time_text = 'vor '+time_count+(time_count==1?' Tag':' Tagen'); break;
			case 'fr': time_text = 'il y a '+time_count+(time_count==1?' jour':' jours'); break;
			case 'ja': time_text = time_count+'日前'; break;
			case 'ko': time_text = time_count+'일 전'; break;
			case 'es': time_text = 'hace '+time_count+(time_count==1?' dia':' dias'); break;
			case 'en': default: time_text = time_count+(time_count==1?' day':' days')+' ago'; break;
		}
	} else if (time_elapsed<4*7*24*60*60) {
		time_count =  Math.floor(time_elapsed/(7*24*60*60))
		switch (GB_Language) {
			case 'tw': time_text = time_count+'星期前'; break;
			case 'cn': time_text = time_count+'星期前'; break;
			case 'de': time_text = 'vor '+time_count+(time_count==1?' Woche':' Wochen'); break;
			case 'fr': time_text = 'il y a '+time_count+(time_count==1?' semaine':' semaines'); break;
			case 'ja': time_text = time_count+'週間前'; break;
			case 'ko': time_text = time_count+'주 전'; break;
			case 'es': time_text = 'hace '+time_count+(time_count==1?' semana':' semanas'); break;
			case 'en': default: time_text = time_count+(time_count==1?' week':' weeks')+' ago'; break;
		}
	} else {
		switch (GB_Language) {
			case 'tw': time_text = '超過4星期前'; break;
			case 'cn': time_text = '超过4星期前'; break;
			case 'de': time_text = 'vor mehr als 4 Wochen'; break;
			case 'fr': time_text = 'il y a plus de 4 semaines'; break;
			case 'ja': time_text = '4週間以上'; break;
			case 'ko': time_text = '4주 이상'; break;
			case 'es': time_text = 'hace más de cuatro semanas '; break;
			case 'en': default: time_text = 'more than 4 weeks ago'; break;
		}
	}
	return time_text;
}

function get_page_text(page_number,page_size,total) {
	if (typeof(total)!='undefined') {
		var max_page = '/'+(Math.floor((total-1)/page_size)+1);
	} else {
		var max_page = '';
	}
	var page_text = '';
	switch (GB_Language) {
		case 'tw': page_text='第'+page_number+max_page+'頁'; break;
		case 'cn': page_text='第'+page_number+max_page+'页'; break;
		case 'ja': page_text=page_number+max_page+'ページ'; break;
		case 'ko': page_text=page_number+max_page+'페이지'; break;
		case 'fr': page_text='Page '+page_number+max_page; break;
		case 'es': page_text='Página '+page_number+max_page; break;
		case 'de': page_text='Seite '+page_number+max_page; break;
		case 'en': default: page_text='Page '+page_number+max_page; break;
	}
	return page_text;
}

function init_select_country_options() {
	$j('#select_city').html('<option value="></option>').hide();
	switch (GB_Country) {
		case '': 
			GB_Region = '';
			$j('#select_region').html('<option value="></option>').hide();
			$j('#select_city').html('<option value="></option>').hide();
			$j('#selectRegionDiv, #selectCityDiv').hide();
			break;
		case 'hk':
			GB_Region = '';
			$j('#select_region').html('<option value="">all areas </option><option value="HK">Hong Kong Island </option><option value="KLN">Kowloon </option><option value="NTE">New Territories East </option><option value="NTW">New Territories West </option>').show();
			$j('#selectRegionDiv, #selectCityDiv').show();
			GB_Region = '';
			GB_City = '';
			break;
		case 'ca':
			$j('#select_region').html('<option value="BC">British Columbia </option><option value="ON">Ontario </option>').show();
			$j('#selectRegionDiv, #selectCityDiv').show();
			GB_Region = 'BC';
			GB_City = 'Vancouver';
			break;
		case 'au':
			$j('#select_region').html('<option value="NSW">New South Wales </option><option value="VIC">Victoria </option><option value="QLD">Queensland </option><option value="ACT">Aus Cap Territory </option><option value="NT">Northen Territory </option><option value="WA">Western Australia </option><option value="TAS">Tasmania </option><option value="SA">South Australia </option>').show();
			$j('#selectRegionDiv, #selectCityDiv').show();
			GB_Region = 'NSW';
			GB_City = 'Sydney';
			break;
		case 'uk':
			$j('#select_region').html('<option value="London">London </option>').show();
			$j('#selectRegionDiv, #selectCityDiv').show();
			GB_Region = 'London';
			GB_City = '';
			break;
	}
}

function find_in_multi_array (multi_array,column_name,find_value) {
	var found = false;
	var index = 0;
	while (index<multi_array.length && !found) {
		if (multi_array[index][column_name]==find_value) {
			found = true;
		} else {
			index += 1;
		}
	}
	if (!found) {
		index = -1;
	}
	return index;
}

var sortNumDescText,sortNumAscText,sortAlphaDescText,sortAlphaAscText;
function change_sort_dir (evt) {
	$j('#'+get_target(evt).parent().parent().attr('id')+'Btn').show();
	var target_object = get_target(evt);
	if (target_object.hasClass('sortNumAsc') || target_object.hasClass('sortNumDesc')) {
		if (target_object.hasClass('sortNumAsc')) {
			target_object.removeClass('sortNumAsc').addClass('sortNumDesc').attr('title',sortNumDescText);
		} else {
			target_object.removeClass('sortNumDesc').addClass('sortNumAsc').attr('title',sortNumAscText);
		}
	} else {
		if (target_object.hasClass('sortAlphaAsc')) {
			target_object.removeClass('sortAlphaAsc').addClass('sortAlphaDesc').attr('title',sortAlphaDescText);
		} else {
			target_object.removeClass('sortAlphaDesc').addClass('sortAlphaAsc').attr('title',sortAlphaAscText);
		}
	}
}

function change_interactive_sort(full_list) {
	var sort_html = '', sort_lang='', sort_field='';
	if (full_list) {
		sort_html += 
			'<div id="sort_by_biz_id" class="sort_tags tag_level_1 round-corners-medium">'+
				'<span id="sort_biz_id_text" class="sortListText">Business ID</span>'+
				'<span class="sortDir sortNumDesc" onclick="change_sort_dir(event);"></span>'+
				'<div class="clearfloat"></div>'+
			'</div>';
	} else {
		sort_html +=
			'<div id="sort_by_fav_user_count" class="sort_tags tag_level_1 round-corners-medium">'+
				'<div class="fltlft webButtonsMedFlat heartButtonMed"></div>'+
				'<span class="sortDir sortNumDesc" onclick="change_sort_dir(event);"></span>'+
				'<div class="clearfloat"></div>'+
			'</div>';
		sort_html +=
			'<div id="sort_by_rating" class="sort_tags tag_level_1 round-corners-medium">'+
				'<div class="fltlft webButtonsMedFlat starButtonMed"></div>'+
				'<span class="sortDir sortNumDesc" onclick="change_sort_dir(event);"></span>'+
				'<div class="clearfloat"></div>'+
			'</div>';
	}
	switch (GB_Country) {
		case '':
			break;
		case 'hk': case 'tw': case 'cn': case 'mo':
			switch (GB_Language) {
				case 'tw': sort_lang = 'tw'; break;
				case 'cn': sort_lang = 'cn'; break;
				case 'pt': if (GB_Country!='mo') {sort_lang = 'en'; } else { sort_lang = 'pt'; }; break;
				case 'en': default: sort_lang = 'en'; break;
			}
			switch (GB_Country) {
				case 'hk': case 'mo': sort_field = 'district'; break;
				case 'cn': case 'tw': sort_field = 'city'; break;
			}
			sort_html += 
				'<div id="sort_by_name" class="sort_tags tag_level_1 round-corners-medium">'+
					'<span id="sort_name_text" class="sortListText">Business Name</span>'+
					'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
					'<div class="fltrtonly sortLang langButtons '+sort_lang+'Button selected" onclick="change_sort_lang(event);"></div>'+
					'<div class="clearfloat"></div>'+
				'</div>'+
				'<div id="sort_by_'+sort_field+'" class="sort_tags tag_level_1 round-corners-medium">'+
					'<span id="sort_'+sort_field+'_text" class="sortListText">City</span>'+
					'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
					'<div class="fltrtonly sortLang langButtons '+sort_lang+'Button selected" onclick="change_sort_lang(event);"></div>'+
					'<div class="clearfloat"></div>'+
				'</div>';
			if (full_list) {
				if (GB_Country=='mo' && sort_lang=='en') {
					sort_lang = 'pt';
				}
				sort_html += 
					'<div id="sort_by_address" class="sort_tags tag_level_1 round-corners-medium">'+
						'<span id="sort_address_text" class="sortListText">Address</span>'+
						'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
						'<div class="fltrtonly sortLang langButtons '+sort_lang+'Button selected" onclick="change_sort_lang(event);"></div>'+
						'<div class="clearfloat"></div>'+
					'</div>';
			}
			break;
		case 'au': case 'uk': case 'us': case 'fr': case 'de':
			sort_html += 
				'<div id="sort_by_en_name" class="sort_tags tag_level_1 round-corners-medium">'+
					'<span id="sort_name_text" class="sortListText">Business Name</span>'+
					'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
					'<div class="clearfloat"></div>'+
				'</div>'+
				'<div id="sort_by_city" class="sort_tags tag_level_1 round-corners-medium">'+
					'<span id="sort_city_text" class="sortListText">City</span>'+
					'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
					'<div class="clearfloat"></div>'+
				'</div>';
			if (full_list) {
				sort_html += 
					'<div id="sort_by_postcode" class="sort_tags tag_level_1 round-corners-medium">'+
						'<span id="sort_postcode_text" class="sortListText">Postcode</span>'+
						'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
						'<div class="clearfloat"></div>'+
					'</div>'+
					'<div id="sort_by_address" class="sort_tags tag_level_1 round-corners-medium">'+
						'<span id="sort_address_text" class="sortListText">Address</span>'+
						'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
						'<div class="clearfloat"></div>'+
					'</div>';
			}
			break;
		case 'ca':
			sort_html += 
				'<div id="sort_by_en_name" class="sort_tags tag_level_1 round-corners-medium">'+
					'<span id="sort_name_text" class="sortListText">Business Name</span>'+
					'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
					'<div class="clearfloat"></div>'+
				'</div>'+
				'<div id="sort_by_city" class="sort_tags tag_level_1 round-corners-medium">'+
					'<span id="sort_city_text" class="sortListText">City</span>'+
					'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
					'<div class="clearfloat"></div>'+
				'</div>';
			if (full_list) {
				sort_html += 
					'<div id="sort_by_postcode" class="sort_tags tag_level_1 round-corners-medium">'+
						'<span id="sort_postcode_text" class="sortListText">Postal Code</span>'+
						'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
						'<div class="clearfloat"></div>'+
					'</div>'+
					'<div id="sort_by_address" class="sort_tags tag_level_1 round-corners-medium">'+
						'<span id="sort_address_text" class="sortListText">Address</span>'+
						'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
						'<div class="clearfloat"></div>'+
					'</div>';
			}
			break;
		case 'sg':
			sort_html += 
				'<div id="sort_by_en_name" class="sort_tags tag_level_1 round-corners-medium">'+
					'<span id="sort_name_text" class="sortListText">Business Name</span>'+
					'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
					'<div class="clearfloat"></div>'+
				'</div>'+
				'<div id="sort_by_district_id" class="sort_tags tag_level_1 round-corners-medium">'+
					'<span id="sort_district_id_text" class="sortListText">District</span>'+
					'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
					'<div class="clearfloat"></div>'+
				'</div>';
			if (full_list) {
				sort_html += 
					'<div id="sort_by_postcode" class="sort_tags tag_level_1 round-corners-medium">'+
						'<span id="sort_postcode_text" class="sortListText">Postal Code</span>'+
						'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
						'<div class="clearfloat"></div>'+
					'</div>'+
					'<div id="sort_by_address" class="sort_tags tag_level_1 round-corners-medium">'+
						'<span id="sort_address_text" class="sortListText">Address</span>'+
						'<span class="sortDir sortAlphaAsc" onclick="change_sort_dir(event);"></span>'+
						'<div class="clearfloat"></div>'+
					'</div>';
			}
			break;
	}
	if (full_list) {
		sort_html +=
			'<div id="sort_by_rating" class="sort_tags tag_level_1 round-corners-medium">'+
				'<span id="sort_rating_text" class="sortListText">Rating</span>'+
				'<span class="sortDir sortNumDesc" onclick="change_sort_dir(event);"></span>'+
				'<div class="clearfloat"></div>'+
			'</div>';
	}
	sort_html +=
		'<div id="sort_by_price_level" class="sort_tags tag_level_1 round-corners-medium">'+
			'<div class="fltlft webButtonsMedFlat dollarButtonMed"></div>'+
			'<span class="sortDir sortNumAsc" onclick="change_sort_dir(event);"></span>'+
			'<div class="clearfloat"></div>'+
		'</div>'+
		'<br class="clearfloat" />';
	$j('#bizResultsSort').empty().append(sort_html);
	change_language_sort_dir();
	change_language_sort_labels();
}

function change_language_sort_labels () {
	switch (GB_Language) {
		case 'tw':
			$j('#sort_biz_id_text').text('商戶編號');$j('#sort_rating_text').text('評分');$j('#sort_name_text').text('商戶名稱');$j('#sort_price_text').text('人均消費 ($)');$j('#sort_locality_text').text('地區');$j('#sort_city_text').text('城市');$j('#sort_postcode_text').text('郵政編碼');$j('#sort_address_text').text('地址');$j('#sort_district_text').text('地區');
			break;
		case 'cn': 
			$j('#sort_biz_id_text').text('商户编号');$j('#sort_rating_text').text('评分');$j('#sort_name_text').text('商户名称');$j('#sort_price_text').text('人均消费 ($)');$j('#sort_locality_text').text('地区');$j('#sort_city_text').text('城市');$j('#sort_postcode_text').text('邮政编码');$j('#sort_address_text').text('地址');$j('#sort_district_text').text('地区');
			break;
		case 'ja': 
			break;
		case 'ko': 
			break;
		case 'fr': 
			break;
		case 'de': 
			break;
		case 'es': 
			break;
		case 'en': default: 
			switch (GB_Country) {
				case 'au':
					$j('#sort_biz_id_text').text('Business ID');$j('#sort_rating_text').text('Rating');$j('#sort_name_text').text('Business Name');$j('#sort_price_text').text('Price Level ($)');$j('#sort_locality_text').text('Neighborhood');$j('#sort_city_text').text('City');$j('#sort_postcode_text').text('Postcode');$j('#sort_address_text').text('Address');$j('#sort_district_text').text('District');
					break;
				case 'uk':
					$j('#sort_biz_id_text').text('Business ID');$j('#sort_rating_text').text('Rating');$j('#sort_name_text').text('Business Name');$j('#sort_price_text').text('Price Level (£)');$j('#sort_locality_text').text('Neighborhood');$j('#sort_city_text').text('City');$j('#sort_postcode_text').text('Postcode');$j('#sort_address_text').text('Address');$j('#sort_district_text').text('District');
					break;
				case 'ca':
					$j('#sort_biz_id_text').text('Business ID');$j('#sort_rating_text').text('Rating');$j('#sort_name_text').text('Business Name');$j('#sort_price_text').text('Price Level ($)');$j('#sort_locality_text').text('Neighborhood');$j('#sort_city_text').text('City');$j('#sort_postcode_text').text('Postal Code');$j('#sort_address_text').text('Address');$j('#sort_district_text').text('District');
					break;
			}
			break;
	}
}

function change_sort_lang(evt) {
	$j('#bizResultsSortBtn').show();
	var target_object = get_target(evt);
	if (target_object.hasClass('enButton')) {
		target_object.removeClass('enButton').addClass('twButton');
	} else if (target_object.hasClass('twButton')) {
		target_object.removeClass('twButton').addClass('cnButton');
	} else if (target_object.hasClass('cnButton')) {
		if (GB_Country=='mo') {
			target_object.removeClass('cnButton').addClass('ptButton');
		} else {
			target_object.removeClass('cnButton').addClass('enButton');
		}
	} else if (target_object.hasClass('ptButton')) {
		if (target_object.parent().attr('id')=='sort_by_address') {
			target_object.removeClass('ptButton').addClass('twButton');
		} else {
			target_object.removeClass('ptButton').addClass('enButton');
		}
	} else {
		target_object.removeClass().addClass('langButtons '+GB_Language+'Button selected fltrtonly');
	}
}

function change_language_sort_dir () {
	var index = 0;
	var sort_count = $j('#bizResultsSort>div').length;
	switch (GB_Language) {
		case 'tw':
			sortAlphaAscText = '英文字母順序 (A-Z)';sortAlphaDescText = '英文字母倒序 (Z-A)';sortNumAscText = '由最低到最高';sortNumDescText = '由最高到最低';
			break;
		case 'cn':
			sortAlphaAscText = '英文字母顺序 (A-Z)';sortAlphaDescText = '英文字母倒序 (Z-A)';sortNumAscText = '由最低到最高';sortNumDescText = '由最高到最低';
			break;
		case 'ja':
			sortAlphaAscText = 'アルファベット順(A-Z)';sortAlphaDescText = '逆アルファベット順(Z-A)';sortNumAscText = '最少から最大';sortNumDescText = '最大から最少';
			break;
		case 'ko':
			sortAlphaAscText = '알파벳순(A-Z)';sortAlphaDescText = '알파벳 역순(Z-A)';sortNumAscText = '오름차순';sortNumDescText = '내림차순';
			break;
		case 'fr':
			sortAlphaAscText = 'Ordre alphabétique (A-Z)';sortAlphaDescText = 'Ordre alphabétique inversé (Z-A)';sortNumAscText = 'du plus faible au plus élevé';sortNumDescText = 'du plus élevé au plus faible';
			break;
		case 'de':
			sortAlphaAscText = 'Alphabetische Reihenfolge (A-Z)';sortAlphaDescText = 'Umgekehrte alphabetische Reihenfolge (Z-A)';sortNumAscText = 'von niedrigstem zu höchstem';sortNumDescText = 'von höchstem zu niedrigstem';
			break;
		case 'es':
			sortAlphaAscText = 'Orden alfabético (A-Z)';sortAlphaDescText = 'Orden alfabético inverso (Z-A)';sortNumAscText = 'de menor a mayor';sortNumDescText = 'de mayor a menor';
			break;
		case 'en': default:
			sortAlphaAscText = 'alphabetical order (A-Z)';sortAlphaDescText = 'reverse alphabetical order (Z-A)';sortNumAscText = 'lowest to highest';sortNumDescText = 'highest to lowest';
			break;
	}
	while (index<sort_count) {
		sort_dir_object = $j('#bizResultsSort>div:eq('+index+')>span:last');
		if (sort_dir_object.hasClass('sortAlphaAsc')) {
			sort_dir_object.attr('title',sortAlphaAscText);
		} else if (sort_dir_object.hasClass('sortAlphaDesc')) {
			sort_dir_object.attr('title',sortAlphaDescText);
		} else if (sort_dir_object.hasClass('sortNumAsc')) {
			sort_dir_object.attr('title',sortNumAscText);
		} else {
			sort_dir_object.attr('title',sortNumDescText);
		}
		index += 1;
	}
}

function get_sort_order (sort_div_id) {
//	window.alert('sorted');
	if (sort_div_id==null) {
		sort_div_id='#bizResultsSort';
	}
	var index = 0;
	var sort_count = $j(sort_div_id+'>div').length;
	var sort_object, sort_dir_object, sort_lang_object, sort_language;
	var biz_sort_order, sort_selector, sort_attr;
	if (sort_count>0) {
		sort_object = $j(sort_div_id+'>div').eq(index);
		sort_dir_object = sort_object.children('SPAN:last');
		sort_lang_object = sort_object.children('div');
		if (sort_lang_object.length>0) {
			if (sort_lang_object.hasClass('enButton')) {
				sort_language = 'en_';
			} else if (sort_lang_object.hasClass('twButton')) {
				sort_language = 'tw_';
			} else if (sort_lang_object.hasClass('cnButton')) {
				sort_language = 'cn_';
			} else if (sort_lang_object.hasClass('ptButton')) {
				sort_language = 'pt_';
			} else {
				sort_language = '';
			}
		} else {
			sort_language = '';
		}
		sort_selector = sort_object.attr('id');
		sort_attr = sort_selector.substr(sort_selector.indexOf('by_')+3);
		if (sort_attr=='country') {
			switch (GB_Language) {
				case 'tw': case 'cn': sort_attr = 'en'; break;
				case 'ja': sort_attr = 'ja_order'; break;
				default: sort_attr = GB_Language; break;
			}
		}
		biz_sort_order = " "+sort_language+sort_attr+(sort_dir_object.hasClass('sortAlphaAsc')||sort_dir_object.hasClass('sortNumAsc')?" ASC":" DESC");
		index += 1;
	}
	while (index<sort_count) {
		sort_object = $j(sort_div_id+'>div').eq(index);
		if (sort_object.is(':visible')) {
			sort_dir_object = sort_object.children('SPAN:last');
			sort_lang_object = sort_object.children('div');
			if (sort_lang_object.length>0) {
				if (sort_lang_object.hasClass('enButton')) {
					sort_language = 'en_';
				} else if (sort_lang_object.hasClass('twButton')) {
					sort_language = 'tw_';
				} else if (sort_lang_object.hasClass('cnButton')) {
					sort_language = 'cn_';
				} else if (sort_lang_object.hasClass('ptButton')) {
					sort_language = 'pt_';
				} else {
					sort_language = '';
				}
			} else {
				sort_language = '';
			}
			sort_selector = sort_object.attr('id');
			sort_attr = sort_selector.substr(sort_selector.indexOf('by_')+3);
			if (sort_attr=='country') {
				switch (GB_Language) {
					case 'tw': case 'cn': sort_attr = 'en'; break;
					case 'ja': sort_attr = 'ja_order'; break;
					default: sort_attr = GB_Language; break;
				}
			}
			biz_sort_order += ", "+sort_language+sort_attr+(sort_dir_object.hasClass('sortAlphaAsc')||sort_dir_object.hasClass('sortNumAsc')?" ASC":" DESC");
		}
		index += 1;
	}
//	get_biz('');
	return biz_sort_order;
}

var page_text_array;
function change_language_page_text(language,country,page,optionsObj) {
	$j('#browserLangBtns>div').hide();
	$j('#browserLangBtns').append('<img src="/images/blue_circles.gif" class="browserLangBtns mediumIcon" />');
	var post_data = new Object;
	post_data['timestamp']=new Date().getTime().toString();
	post_data['language']=language;
	post_data['country']=country;
	post_data['page']=page;
	switch (page) {
		case 'features':
			post_data['id']=optionsObj['id'];
			post_data['id_specified']=optionsObj['id_specified'];
			post_data['country_codes']=collect_countries('visitorTable');
			break;
		case 'groups':
			post_data['id']=optionsObj['id'];
			post_data['id_specified']=optionsObj['id_specified'];
			post_data['country_codes']=collect_countries('visitorTable');
			break;
		case 'search':
			post_data['popular_tags']=collect_tag_ids('popularTags');
			post_data['cuisine_tags']=collect_tag_ids('bizTagsCuisine');
			post_data['business_tags']=collect_tag_ids('bizTagsBusiness');
			post_data['food_tags']=collect_tag_ids('bizTagsFood');
			post_data['ambiance_tags']=collect_tag_ids('bizTagsAmbiance');
			post_data['service_tags']=collect_tag_ids('bizTagsService');
			post_data['selected_tags']=collect_tag_ids('selectedTags');
			post_data['previous_tags']=collect_tag_ids('previousTags');
			break;
		case 'home':
			post_data['best_tags']=collect_tag_ids('bestBizTags');
			post_data['mall_tags']=collect_mall_ids('bestBizTags');
			post_data['country']=GB_Country;
			break;
	}
	pogoPost('/text/loadPageText.php',post_data,process_load_page_text,'json');
}

function collect_tag_ids(tag_cloud) {
	var index=0;
	var num_tags = $j('#'+tag_cloud+'>:button').length;
	var tag_selector;
	var tag_id_array = new Array();
	while (index<num_tags) {
		tag_selector = $j('#'+tag_cloud+'>:button:eq('+index+')').attr('id');
		if (tag_selector.substring(tag_selector.indexOf('_')+1,tag_selector.lastIndexOf('_'))=='tag' || tag_selector.substring(0,3)=='tag') {
			tag_id_array.push(tag_selector.substr(tag_selector.lastIndexOf('_')+1));
		}
		index += 1;
	}
	return tag_id_array;
}

function collect_mall_ids(tag_cloud) {
	var index=0;
	var num_tags = $j('#'+tag_cloud+'>.bldg_tags:button').length;
	var tag_selector;
	var tag_id_array = new Array();
	while (index<num_tags) {
		tag_selector = $j('#'+tag_cloud+'>.bldg_tags:button:eq('+index+')').attr('id');
		tag_id_array.push(tag_selector.substr(tag_selector.lastIndexOf('_')+1));
		index += 1;
	}
	return tag_id_array;
}

function collect_countries(country_table) {
	var index = 0;
	var num_countries = $j('#'+country_table+' tr').length-1;
	var country_list = new Array();
	while (index<num_countries) {
		index +=1;
		country_list.push($j('#'+country_table+' tr:eq('+index+')>td:eq(0)').text());
	}
	return country_list;
}

function load_country_names (country_table,country_names) {
	var index = 0;
	var num_countries = country_names.length;
	var country_code;
	while (index<num_countries) {
		index +=1;
		country_code = $j('#'+country_table+' tr:eq('+index+')>td.hiddenID').text();
		$j('#'+country_table+' tr:eq('+index+')>td:eq(1)').text(country_names[index-1]+' ('+country_code+')');
	}
}

function update_tag_value(tag_name_array,tag_cloud) {
	var index = 0;
	var num_tags = tag_name_array.length;
	var current_tag_value,tag_object,char_pos;
	while (index<num_tags) {
		tag_object = $j('#'+tag_cloud+'>:button:eq('+index+')');
		if (tag_object.length>0) {
			current_tag_value = tag_object.val();
			char_pos = current_tag_value.lastIndexOf('(');
			if (char_pos>0) {
				tag_object.val(tag_name_array[index]+' '+current_tag_value.substr(char_pos));
			} else {
				tag_object.val(tag_name_array[index]);
			}
		}
		index += 1;
	}
}

function update_mall_name(mall_name_array,tag_cloud) {
	var index = 0;
	var num_tags = mall_name_array.length;
	var current_tag_value,tag_object,char_pos;
	while (index<num_tags) {
		tag_object = $j('#'+tag_cloud+'>.bldg_tags:button:eq('+index+')');
		if (tag_object.length>0) {
			current_tag_value = tag_object.val();
			char_pos = current_tag_value.lastIndexOf('(');
			if (char_pos>0) {
				tag_object.val(mall_name_array[index]+' '+current_tag_value.substr(char_pos));
			} else {
				tag_object.val(mall_name_array[index]);
			}
		}
		index += 1;
	}
}

var $defaultText,$dialogText,$labelText;
function process_load_page_text(page_text_array) {
	var index = 0;
	var text_array = page_text_array['html']
	var num_text = text_array.length;
	var text_object;
	while (index<num_text) {
		text_object = text_array[index];
		$j(text_object['selector']).html(text_object['content']);
		index +=1 ;
	}
	index = 0;
	text_array = page_text_array['attr'];
	num_text = text_array.length;
	while (index<num_text) {
		text_object = text_array[index];
		$j(text_object['selector']).attr(text_object['type'],text_object['content']);
		index +=1 ;
	}
	$defaultText = new Object;
	index = 0;
	text_array = page_text_array['default'];
	num_text = text_array.length;
	while (index<num_text) {
		text_object = text_array[index];
		$defaultText[text_object['selector']]=text_object['content'];
		index +=1 ;
	}
	$labelText = new Object;
	index = 0;
	text_array = page_text_array['label'];
	num_text = text_array.length;
	while (index<num_text) {
		text_object = text_array[index];
		$labelText[text_object['selector']]=text_object['content'];
		index +=1 ;
	}
	$dialogText = new Object;
	index = 0;
	text_array = page_text_array['dialog'];
	num_text = text_array.length;
	while (index<num_text) {
		text_object = text_array[index];
		$dialogText[text_object['selector']]=text_object['content'];
		index +=1 ;
	}
	post_load_page_text(page_text_array['other_text']);
	switch (page_text_array['page']) {
		case 'features':
			$featureText = page_text_array['feature_text'];
			$featureBtns = page_text_array['feature_buttons'];
			load_feature_text();
			load_country_names('visitorTable',page_text_array['country_names']);
			break;
		case 'groups':
			$groupText = page_text_array['group_text'];
			$groupBtns = page_text_array['group_buttons'];
			load_group_text();
			load_country_names('visitorTable',page_text_array['country_names']);
			break;
		case 'search':
			if (page_text_array['timestamp']>=$bizResultsTimeStamp) {
				update_tag_value(page_text_array['popular_tags'],'popularTags');
				update_tag_value(page_text_array['cuisine_tags'],'bizTagsCuisine');
				update_tag_value(page_text_array['business_tags'],'bizTagsBusiness');
				update_tag_value(page_text_array['food_tags'],'bizTagsFood');
				update_tag_value(page_text_array['ambiance_tags'],'bizTagsAmbiance');
				update_tag_value(page_text_array['service_tags'],'bizTagsService');
				update_tag_value(page_text_array['selected_tags'],'selectedTags');
				update_tag_value(page_text_array['previous_tags'],'previousTags');
			}
			break;
		case 'home':
			update_tag_value(page_text_array['best_tags'],'bestBizTags');
			update_mall_name(page_text_array['mall_tags'],'bestBizTags');
			break;
	}
	$j('#browserLangBtns>img').remove();
	$j('#browserLangBtns>div').show();
	change_language_browser_buttons();
}

var help_array, help_language='', current_topic='';
function display_help (evt,page,help_topic) {
	log_click('home.php',get_target(evt).attr('id'),'click help');
	$j('#helpDialog').dialog('option','title',$dialogText['help_title']);
	if (help_language!=GB_Language) {
		help_language = GB_Language;
		current_topic = help_topic;
		help_content = '<div class="topMargin16"><img src="/images/blue_circles.gif" class="fltlft largeIcon" /><span class="fltlft topMargin8">'+$defaultText['loading']+'...</span></div><br />';
		pogoPost('/text/loadHelp.php',{language:GB_Language,page:page},process_load_help,'json');
	} else {
		var help_content;
		var help_object = help_array[help_topic];
		help_content = '<h3 class="hiliteWords">'+help_object['title']+'</h3>'+help_object['content']+'<br />';
	}
	if (GB_Language=='tw' || GB_Language=='cn' || GB_Language=='ja' || GB_Language=='ko') {
		$j('#helpDialogContent').css('font-size','11pt').css('line-height','150%');
	} else {
		$j('#helpDialogContent').css('font-size','10pt').css('line-height','125%');
	}
	$j('#helpDialogContent').empty().append(help_content);
	$j('#helpDialog').dialog('open');
}

function process_load_help(return_data) {
	help_array = return_data;
	var help_object = help_array[current_topic];
	var help_content = '<h3 class="hiliteWords">'+help_object['title']+'</h3>'+help_object['content']+'<br />';
	$j('#helpDialogContent').empty().append(help_content);
}

function check_IE6() {
	var button_selector = $j('#browserLangBtns>div.selected').attr('id');
	GB_Language = button_selector.substr(button_selector.lastIndexOf('_')+1);
	//
	if (navigator.appName=='Microsoft Internet Explorer' && !navigator.appVersion.match(/MSIE 9/) && !navigator.appVersion.match(/MSIE 8/) && !navigator.appVersion.match(/MSIE 7/)) {
		var download_text='',download_link='';
		switch (GB_Language) {
			case 'tw': window.alert('您使用的瀏覽器可能是舊版的 Internet Explorer。 使用 IE8 來瀏覽這個網站會得到最佳的瀏覽效果。請到微軟的網站或打開我們網站內的鏈結來下載最近的版本。謝謝。');
				download_text = '下載 IE8';
				if (((navigator.language) ? navigator.language : navigator.userLanguage)=='zh-hk') {
					download_link = 'http://www.microsoft.com/hk/windows/chinese/internet-explorer/worldwide-sites.aspx';
				} else {
					download_link = 'http://www.microsoft.com/taiwan/windows/internet-explorer/worldwide-sites.aspx';
				}
				break; 
			case 'cn': window.alert('您使用的浏览器可能是旧版的 Internet Explorer。 使用　IE8 来浏览这个网站会得到最佳的浏览效果。请到微软的网站或打开我们网站内的链结来下载最近的版本。谢谢。');
				download_text = '下载 IE8';
				download_link = 'http://www.microsoft.com/china/windows/internet-explorer/worldwide-sites.aspx';
				break; 
			case 'de': window.alert('Möglicherweise verwenden Sie eine ältere Version des Internet Explorer. Diese Seite ist für die Anzeige im Internet Explorer Version 8 optimiert. Bitte besuchen Sie Microsoft-Homepage oder folgen Sie dem Link auf unserer Website um die neueste Version herunterzuladen.');
				download_text = 'Download IE8';
				download_link = 'http://www.microsoft.com/germany/windows/internet-explorer/worldwide-sites.aspx';
				break; 
			case 'fr': window.alert('Vous utilisez peut-être une ancienne version d\'Internet Explorer. Ce site est optimisé pour un affichage dans Internet Explorer version 8. S\'il vous plaît visitez la page d\'accueil de Microsoft ou suivez le lien sur notre site Web pour télécharger la dernière version. Merci.');
				download_text = 'télécharger IE8';
				download_link = 'http://www.microsoft.com/france/windows/internet-explorer/worldwide-sites.aspx';
				break; 
			case 'es': window.alert('Puede estar usando una versión antigua de Internet Explorer. Este sitio está optimizado para su visualización en Internet Explorer versión 8. Por favor, visite la página de Microsoft en casa o seguir el enlace en nuestro sitio web para descargar la última versión. Gracias.'); 
				download_text = 'descargar IE8';
				download_link = 'http://www.microsoft.com/spain/windows/internet-explorer/worldwide-sites.aspx';
				break; 
			case 'ja': window.alert('Internet Explorerの古いバージョンを使用している可能性があります。 このサイトは Internet Explorer のバージョン８で表示するために最適化されます。マイクロソフト社のホームページから最新バージョンをダウンロードしてください。ありがとうございます。');
				download_text = 'IE8をダウンロード';
				download_link = 'http://www.microsoft.com/japan/windows/internet-explorer/worldwide-sites.aspx';
				break; 
			case 'ko': window.alert('Internet Explorer의 이전 버전을 사용 중일 수 있습니다. 이 사이트는 Internet Explorer 버전 8에 표시하기 위해 최적화됩니다. Microsoft 사의 홈페이지에서 최신 버전을 다운로드하십시오. 감사합니다.');
				download_text = 'IE8을 다운로드';
				download_link = 'http://www.microsoft.com/korea/windows/internet-explorer/worldwide-sites.aspx';
				break; 
			case 'en': default: window.alert('You may be using an old version of Internet Explorer. This site is optimised for viewing in Internet Explorer version 8. Please visit Microsoft\'s home page or follow the link on our website to download the latest version. Thank you.'); 
				download_text = 'download IE8';
				download_link = 'http://www.microsoft.com/windows/internet-explorer/worldwide-sites.aspx';
				break; 
		}
		$j('#downloadIE8Link').show().text(download_text).unbind('click').click(function(){window.open(download_link,'_blank')});
	} else {
		$j('#downloadIE8Link').hide();
	}
}

function get_table_info(total,page_size,page_num,dataset_name,optObject) {
	var div_html='',total_info_html,page_info_html;
	var counter_char='';
	var page_count = Math.ceil(total/page_size);
	if (GB_Language=='tw' || GB_Language=='cn') {
		switch (dataset_name) {
			case 'review': case 'blog': counter_char=(GB_Language=='tw'?'篇':'篇'); break;
			case 'product': case 'list': case 'district': case 'friend': counter_char=(GB_Language=='tw'?'個':'个'); break;
			case 'street': counter_char=(GB_Language=='tw'?'條':'条'); break;
			case 'building': counter_char=(GB_Language=='tw'?'座':'座'); break;
			case 'biz': counter_char=(GB_Language=='tw'?'家':'家'); break;
			case 'photos': counter_char=(GB_Language=='tw'?'張':'张'); break;
			case 'char': counter_char=(GB_Language=='tw'?'字':'字');　break;
		}
	} else if (GB_Language=='ja') {
		switch (dataset_name) {
			case 'biz': counter_char='店'; break;
			case 'photo': counter_char='枚'; break;
		}
	} else if (GB_Language=='ko') {
		switch (dataset_name) {
			case 'biz': counter_char='개소'; break;
			case 'review': case 'blog': case 'list': counter_char='개'; break;
		}
	}
	switch (GB_Language) {
		case 'tw': 
			total_info_html = '<strong><span id="total_count_pre_text">共：</span>'+total+'<span id="total_count_post_text">'+counter_char+'</span></strong>';
			page_info_html = '<span id="page_count_pre_text"> (每頁</span>'+page_size+'<span id="page_count_post_text">'+counter_char+'</span><span id="num_page_pre_text">＝</span><span id="num_page_count">'+page_count+'</span><span id="num_page_post_text">頁)</span>'; break;
		case 'cn': 
			total_info_html = '<strong><span id="total_count_pre_text">共：</span>'+total+'<span id="total_count_post_text">'+counter_char+'</span></strong>';
			page_info_html = '<span id="page_count_pre_text"> (每页</span>'+page_size+'<span id="page_count_post_text">'+counter_char+'</span><span id="num_page_pre_text">＝</span><span id="num_page_count">'+page_count+'</span><span id="num_page_post_text">页)</span>'; break;
		case 'ja': 
			total_info_html = '<strong><span id="total_count_pre_text">合計：</span>'+total+'<span id="total_count_post_text">'+counter_char+'</span></strong>';
			page_info_html = '<span id="page_count_pre_text"> (1ページあたり</span>'+page_size+'<span id="page_count_post_text">'+counter_char+'</span><span id="num_page_pre_text">＝</span><span id="num_page_count">'+page_count+'</span><span id="num_page_post_text">ページ)</span>'; break;
		case 'en': default: 
			total_info_html = '<strong><span id="total_count_pre_text">total: </span>'+total+'<span id="total_count_post_text"></span></strong>';
			page_info_html = '<span id="page_count_pre_text"> (</span>'+page_size+'<span id="page_count_post_text">/page</span><span id="num_page_pre_text">=</span><span id="num_page_count">'+page_count+'</span><span id="num_page_post_text">'+(page_count==1?' page':' pages')+')</span>'; break;
	}
	var no_total;
	if (typeof(optObject)!='object') {
		no_total = false;
	} else {
		if (optObject.noTotal==null) {
			no_total = false;
		} else {
			no_total = optObject.noTotal;
		}
	}
	if (!no_total) {
		div_html = total_info_html;
	} else {
		div_html = '';
	}
	if (page_count>1) {
		div_html += page_info_html;
	}
	return div_html;
}

function get_table_navi(total,page_size,page_num_variable,get_page_function) {
	page_num = parseInt(eval(page_num_variable));
	if (!get_page_function.match(/\028.*\029/)) {
		get_page_function += '()';
	}
	var navi_html = '';
	if (total>page_size) {
		var page_index,last_page,page_num_html='';
		var page_count = Math.ceil(total/page_size);
		if (page_num-3>1) {
			page_index = 1;
			last_page = Math.min(2,page_num-4);
			while (page_index <= last_page) {
				page_num_html += '<div class="otherPages"><a href="javascript:'+page_num_variable+'='+page_index+';'+get_page_function+';" onclick="'+page_num_variable+'='+page_index+';'+get_page_function+';">'+page_index+'</a></div>';
				page_index += 1;
			}
			if (page_num-3>3) {
				page_num_html += '<div class="omittedPages">...</div>';
			}
		}
		
		page_index = Math.max(1,page_num-3);
		last_page = Math.min(page_num+3,page_count);
		while (page_index <= last_page) {
			if (page_index != page_num) {
				page_num_html += '<div class="otherPages"><a href="javascript:'+page_num_variable+'='+page_index+';'+get_page_function+';" onclick="'+page_num_variable+'='+page_index+';'+get_page_function+';">'+page_index+'</a></div>';
			} else {
				page_num_html += '<div class="currentPage">'+page_index+'</div>';
			}
			page_index += 1;
		}
		if (page_num+3<page_count) {
			page_index = Math.max(page_count-1,page_num+4);
			last_page = page_count;
			if (page_num+3<page_count-2) {
				page_num_html += '<div class="omittedPages">...</div>';
			}
			while (page_index <= last_page) {
				page_num_html += '<div class="otherPages"><a href="javascript:'+page_num_variable+'='+page_index+';'+get_page_function+';" onclick="'+page_num_variable+'='+page_index+';'+get_page_function+';">'+page_index+'</a></div>';
				page_index += 1;
			}
		}

		navi_html = '';
		navi_html += '<div class="fltrt">';
		if (total/page_size>2 && page_num>1) {
			navi_html += '<div class="fltlft webButtonsMed firstButtonMed" onclick="'+page_num_variable+'=1;'+get_page_function+';"></div>';
		}
		if (total/page_size>1 && page_num>1) {
			navi_html += '<div class="fltlft webButtonsMed prevButtonMed" onclick="'+page_num_variable+'='+(page_num-1)+';'+get_page_function+';"></div>';
		}
		navi_html += '<div class="fltlft">'+page_num_html+'</div>';
		last_page = Math.ceil(total/page_size);
		if (total/page_size>1 && page_num<last_page ) {
			navi_html += '<div class="fltlft webButtonsMed nextButtonMed" onclick="'+page_num_variable+'='+(page_num+1)+';'+get_page_function+';"></div>';
		}
		if (total/page_size>2 && page_num<last_page) {
			navi_html += '<div class="fltlft webButtonsMed lastButtonMed" onclick="'+page_num_variable+'='+last_page+';'+get_page_function+';"></div>';
		}
		navi_html += '<div class="fltlftonly">'+
						'<div class="fltlft"><span id="goto_page_pre_text">page </span><input type="text" size="1" onchange="if(isNaN($j(this).val())) { window.alert(not_number_error); } else {'+page_num_variable+'=$j(this).val();'+get_page_function+';}" /><span id="goto_page_post_text"></span></div>'+
						'<div class="fltlftonly"><input type="image" onclick="if(isNaN($j(this).parent().prev().children(\'input\').val())) { window.alert(not_number_error); } else {'+page_num_variable+'=$j(this).parent().prev().children(\'input\').val();'+get_page_function+';}" title="go to page" src="/artwork/goto_page_button.jpg" class="mediumIcon" /></div>'+
						'</div>';
		navi_html += '</div>';
		navi_html += '<br class="clearfloat" />';
	}
	return navi_html;
}
/*
function build_table_navi(div_selector,total,page_size,page_num,dataset_name) {
	$j('#'+div_selector).empty();
	if (total>page_size) {
		$j('#'+div_selector).show();
		var navi_html = '';
		var page_index,last_page,page_num_html='';
		var page_count = Math.ceil(total/page_size);
		if (page_num-3>1) {
			page_index = 1;
			last_page = Math.min(2,page_num-4);
			while (page_index <= last_page) {
				page_num_html += '<div class="otherPages"><a href="javascript:goto_page('+"'"+dataset_name+"',"+page_index+');" onclick="goto_page('+"'"+dataset_name+"',"+page_index+')">'+page_index+'</a></div>';
				page_index += 1;
			}
			if (page_num-3>3) {
				page_num_html += '<div class="omittedPages">...</div>';
			}
		}
		
		page_index = Math.max(1,page_num-3);
		last_page = Math.min(page_num+3,page_count);
		while (page_index <= last_page) {
			if (page_index != page_num) {
				page_num_html += '<div class="otherPages"><a href="javascript:goto_page('+"'"+dataset_name+"',"+page_index+');" onclick="goto_page('+"'"+dataset_name+"',"+page_index+')">'+page_index+'</a></div>';
			} else {
				page_num_html += '<div class="currentPage">'+page_index+'</div>';
			}
			page_index += 1;
		}
		if (page_num+3<page_count) {
			page_index = Math.max(page_count-1,page_num+4);
			last_page = page_count;
			if (page_num+3<page_count-2) {
				page_num_html += '<div class="omittedPages">...</div>';
			}
			while (page_index <= last_page) {
				page_num_html += '<div class="otherPages"><a href="javascript:goto_page('+"'"+dataset_name+"',"+page_index+');" onclick="goto_page('+"'"+dataset_name+"',"+page_index+')">'+page_index+'</a></div>';
				page_index += 1;
			}
		}

		navi_html = '';
		navi_html += '<div class="fltrt">';
		if (total/page_size>2 && page_num>1) {
			navi_html += '<div class="fltlft"><input type="image" onclick="first_page(\''+dataset_name+'\');" src="/artwork/goto_first_button.jpg" width="20px" height="20px" /></div>';
		}
		if (total/page_size>1 && page_num>1) {
			navi_html += '<div class="fltlft"><input type="image" onclick="previous_page(\''+dataset_name+'\');" src="/artwork/prev_button.jpg" width="20px" height="20px" /></div>';
		}
		navi_html += '<div class="fltlft">'+page_num_html+'</div>';
		if (total/page_size>1 && page_num<Math.ceil(total/page_size)) {
			navi_html += '<div class="fltlft"><input type="image" onclick="next_page(\''+dataset_name+'\');" src="/artwork/next_button.jpg" width="20px" height="20px" /></div>';
		}
		if (total/page_size>2 && page_num<Math.ceil(total/page_size)) {
			navi_html += '<div class="fltlft"><input type="image" onclick="last_page(\''+dataset_name+'\');" src="/artwork/goto_last_button.jpg" width="20px" height="20px" /></div>';
		}
		navi_html += '<div class="fltlftonly">'+
						'<div class="fltlft"><span id="goto_page_pre_text">page </span><input type="text" size="1" id="'+dataset_name+'_goto_page" onchange="goto_page(\''+dataset_name+'\',$j(\'#'+dataset_name+'_goto_page\').val())" /><span id="goto_page_post_text"></span></div>'+
						'<div class="fltlftonly"><input id="'+dataset_name+'_goto_page_btn" type="image" onclick="goto_page(\''+dataset_name+'\',$j(\'#'+dataset_name+'_goto_page\').val())" title="go to page" src="/artwork/goto_page_button.jpg" class="mediumIcon" /></div>'+
						'</div>';
		navi_html += '</div>';
		navi_html += '<br class="clearfloat" />';
		$j('#'+div_selector).html(navi_html);
	} else {
		$j('#'+div_selector).hide();
	}
}
*/

function create_item_navigation (itemTotal,pageSize,pageNum,current_item,entity_name) {
	var item_navi_html = '';
	var start_item = (pageNum-1)*pageSize+1;
	if (pageNum*pageSize>itemTotal) {
		var end_item = itemTotal;
	} else {
		var end_item = start_item+pageSize-1;
	}
	if (pageNum>2) {
		item_navi_html += '<div class="fltlft topMargin4 rightMargin4 webButtonsMed firstButtonMed" onclick="first_page_item(\''+entity_name+'\');"></div>';
	}
	if (pageNum>1) {
		item_navi_html += '<div class="fltlft topMargin4 rightMargin4 webButtonsMed prevButtonMed" onclick="prev_page_item(\''+entity_name+'\');"></div>';
	}
	var index = 0;
	while (start_item<=end_item) {
		if (index==current_item) {
			item_navi_html += '<div class="currentItem">'+start_item+'</div>';
		} else {
			item_navi_html += '<div class="otherItems"><a href="javascript:goto_item(\''+entity_name+'\','+index+');" onclick="goto_item(\''+entity_name+'\','+index+');">'+start_item+'</a></div>';
		}
		start_item += 1;
		index += 1;
	}
	var total_pages=Math.floor(itemTotal/pageSize)+1;
	if (pageNum<total_pages-1) {
		item_navi_html += '<div class="fltlft topMargin4 leftMargin4 webButtonsMed lastButtonMed" onclick="last_page_item(\''+entity_name+'\');"></div>';
	}
	if (pageNum<total_pages) {
		item_navi_html += '<div class="fltlft topMargin4 leftMargin4 webButtonsMed nextButtonMed" onclick="next_page_item(\''+entity_name+'\');"></div>';
	}
	return item_navi_html;
}

/*
function create_page_navigation (ds_dataset,pageSize,pageNum,regionID,pageNumID,pageInfoID,sortID,sortDirection,entity_name) {
	var row_count = ds_dataset.getCurrentRow()['total'];
	var page_count = Math.ceil(row_count/pageSize);
	var pageInfo_content = '';
	var page_index, last_page;
	var counter_char = '';
	$j(pageNumID).empty();
	
	if (pageNum-3>1) {
		page_index = 1;
		last_page = Math.min(2,pageNum-4);
		while (page_index <= last_page) {
			pageInfo_content += '<div class="otherPages"><a href="javascript:goto_page('+"'"+entity_name+"',"+page_index+');" onclick="goto_page('+"'"+entity_name+"',"+page_index+')">'+page_index+'</a></div>';
			page_index += 1;
		}
		if (pageNum-3>3) {
			pageInfo_content += '<div class="omittedPages">...</div>';
		}
	}
	
	page_index = Math.max(1,pageNum-3);
	last_page = Math.min(pageNum+3,page_count);
	while (page_index <= last_page) {
		if (page_index != pageNum) {
			pageInfo_content += '<div class="otherPages"><a href="javascript:goto_page('+"'"+entity_name+"',"+page_index+');" onclick="goto_page('+"'"+entity_name+"',"+page_index+')">'+page_index+'</a></div>';
		} else {
			pageInfo_content += '<div class="currentPage">'+page_index+'</div>';
		}
		page_index += 1;
	}
	if (pageNum+3<page_count) {
		page_index = Math.max(page_count-1,pageNum+4);
		last_page = page_count;
		if (pageNum+3<page_count-2) {
			pageInfo_content += '<div class="omittedPages">...</div>';
		}
		while (page_index <= last_page) {
			pageInfo_content += '<div class="otherPages"><a href="javascript:goto_page('+"'"+entity_name+"',"+page_index+');" onclick="goto_page('+"'"+entity_name+"',"+page_index+')">'+page_index+'</a></div>';
			page_index += 1;
		}
	}
	
	$j(pageNumID).append(pageInfo_content);
	if (row_count>pageSize) {
		if (GB_Language=='tw' || GB_Language=='cn') {
			switch (entity_name) {
				case 'tags':
				case 'ds_hk_buildings':
				case 'ds_hk_districts':
				case 'ds_products': counter_char=(GB_Language=='tw'?'個':'个'); break;
				case 'ds_hk_streets': counter_char=(GB_Language=='tw'?'條':'条'); break;
				case 'ds_hk_biz': case 'ds_biz_profiles':　counter_char=(GB_Language=='tw'?'家':'家'); break;
				case 'ds_photos': case 'ds_my_photos':　
					switch (GB_Language) {
						case 'tw': counter_char='張'; break;
						case 'cn': counter_char='张'; break;
						case 'ja': counter_char='枚'; break;
						case 'ko': counter_char=''; break;
						default: counter_char = ''; break;
					};
					break;
				case 'ds_tw_cn':
				case 'ds_biezi':　counter_char=(GB_Language=='tw'?'字':'字');　break;
			}
		}
		switch (GB_Language) {
			case 'tw': $j(pageInfoID).html('<strong><span id="total_count_pre_text">共：</span>'+row_count+'<span id="total_count_post_text">'+counter_char+'</span></strong><span id="page_count_pre_text">，每頁</span>'+pageSize+'<span id="page_count_post_text">'+counter_char+'</span><span id="num_page_pre_text">＝</span><span id="num_page_count">'+page_count+'</span><span id="num_page_post_text">頁</span>'); break;
			case 'cn': $j(pageInfoID).html('<strong><span id="total_count_pre_text">共：</span>'+row_count+'<span id="total_count_post_text">'+counter_char+'</span></strong><span id="page_count_pre_text">，每页</span>'+pageSize+'<span id="page_count_post_text">'+counter_char+'</span><span id="num_page_pre_text">＝</span><span id="num_page_count">'+page_count+'</span><span id="num_page_post_text">页</span>'); break;
			case 'ja': $j(pageInfoID).html('<strong><span id="total_count_pre_text">合計：</span>'+row_count+'<span id="total_count_post_text">'+counter_char+'</span></strong><span id="page_count_pre_text">，1ページあたり</span>'+pageSize+'<span id="page_count_post_text">'+counter_char+'</span><span id="num_page_pre_text">＝</span><span id="num_page_count">'+page_count+'</span><span id="num_page_post_text">ページ</span>'); break;
			case 'en': default: $j(pageInfoID).html('<strong><span id="total_count_pre_text">total: </span>'+row_count+'<span id="total_count_post_text"></span></strong><span id="page_count_pre_text">, </span>'+pageSize+'<span id="page_count_post_text">/page</span><span id="num_page_pre_text">=</span><span id="num_page_count">'+page_count+'</span><span id="num_page_post_text">'+(page_count==1?' page':' pages')+'</span>'); break;
		}
	} else {
		switch (GB_Language) {
			case 'tw': 
			case 'cn': $j(pageInfoID).html('<strong>共：'+row_count+counter_char+'</strong>'); break;
			case 'ja': $j(pageInfoID).html('<strong>合計：'+row_count+counter_char+'</strong>'); break;
			default: $j(pageInfoID).html('<strong>total: '+row_count+'</strong>'); break;
		}
	}

	if (sortID!='') {
		if (entity_name=='ds_photos') {
			create_sort_icons ('#PhotoNavi span',sortID,sortDirection,'e-w');
		} else if (entity_name=='ds_biz_profiles') {
			create_sort_icons ('#'+regionID+' th>div',sortID,sortDirection,'n-s');
		} else if (sortID!='' && sortDirection!=''){
			create_sort_icons ('#'+regionID+' th>span',sortID,sortDirection,'n-s');
		}
	}
};
*/
function create_sort_icons (icon_selector,sortID,sortDirection,iconDirection) {
	if (iconDirection=='e-w') {
		$j(icon_selector).addClass('ui-icon opague ui-icon-carat-2-e-w');
		$j(sortID).removeClass('ui-icon-carat-2-e-w opague');
		if (sortDirection == 'DESC') {
			$j(sortID).addClass('ui-icon-carat-1-w');
		} else {
			$j(sortID).addClass('ui-icon-carat-1-e');
		};
	} else {
		$j(icon_selector).addClass('ui-icon opague ui-icon-carat-2-n-s');
		$j(sortID).removeClass('ui-icon-carat-2-n-s opague');
		if (sortDirection == 'DESC') {
			$j(sortID).addClass('ui-icon-carat-1-n');
		} else {
			$j(sortID).addClass('ui-icon-carat-1-s');
		};
	}
}

function first_page_item(entity_name) {
	switch (entity_name) {
		case 'biz_reviews':
			$myReviewsPageNum=1;
			get_reviews (ds_review_counts.getCurrentRow()['user_id'],$j('#myReviewCtrySelect').val(),$myReviewsPageSize*($myReviewsPageNum-1),$myReviewsPageSize);
			break;
		case 'user_blogs':
			$myBlogsPageNum=1;
			construct_ds_blogs_path();
			break;
	}
}

function prev_page_item(entity_name) {
	switch (entity_name) {
		case 'biz_reviews':
			if ($myReviewsPageNum>1) {
				$myReviewsPageNum -= 1;
			}
			get_reviews (ds_review_counts.getCurrentRow()['user_id'],$j('#myReviewCtrySelect').val(),$myReviewsPageSize*($myReviewsPageNum-1),$myReviewsPageSize);
			break;
		case 'user_blogs':
			if ($myBlogsPageNum>1) {
				$myBlogsPageNum -= 1;
			}
			construct_ds_blogs_path();
			break;
	}
}

function next_page_item(entity_name) {
	switch (entity_name) {
		case 'biz_reviews':
			var country_index = parseInt($j('#myReviewCtrySelect').attr('selectedIndex'));
			var itemTotal = ds_review_counts.getCurrentRow()['countries'][country_index]['count'];
			if ($myReviewsPageNum<(Math.floor(itemTotal/$myReviewsPageSize)+1)) {
				$myReviewsPageNum += 1;
			}
			get_reviews (ds_review_counts.getCurrentRow()['user_id'],$j('#myReviewCtrySelect').val(),$myReviewsPageSize*($myReviewsPageNum-1),$myReviewsPageSize);
			break;
		case 'user_blogs':
			if ($myBlogsPageNum<(Math.floor(ds_blogs_main.getCurrentRow()['total']/$myBlogsPageSize)+1)) {
				$myBlogsPageNum += 1;
			}
			construct_ds_blogs_path();
			break;
	}
}

function last_page_item(entity_name) {
	switch (entity_name) {
		case 'biz_reviews':
			var country_index = parseInt($j('#myReviewCtrySelect').attr('selectedIndex'));
			var itemTotal = ds_review_counts.getCurrentRow()['countries'][country_index]['count'];
			$myReviewsPageNum = Math.floor(itemTotal/$myReviewsPageSize)+1;
			get_reviews (ds_review_counts.getCurrentRow()['user_id'],$j('#myReviewCtrySelect').val(),$myReviewsPageSize*($myReviewsPageNum-1),$myReviewsPageSize);
			break;
		case 'user_blogs':
			$myBlogsPageNum = Math.floor(ds_blogs_main.getCurrentRow()['total']/$myBlogsPageSize)+1;
			construct_ds_blogs_path();
			break;
	}
}

function goto_item(entity,itemNum) {
	switch (entity) {
		case 'biz_reviews':
			populate_biz_review(itemNum);
			break;
		case 'user_blogs':
			populate_user_blogs(itemNum);
			break;
	}
}

/*
function first_page(dataset_name,function_name) {
	switch (dataset_name) {
		case 'ds_tags':
			ds_tags_pageNum = 1;
			construct_ds_tags_path();
			break;
		case 'ds_hk_streets':
			$hkStreetsPageNum = 1;
			get_streets();
			break;
		case 'ds_hk_buildings':
			$hkBuildingsPageNum = 1;
			get_buildings();
			break;
		case 'ds_hk_districts':
			$hkDistrictsPageNum = 1;
			get_districts();
			break;
		case 'ds_tw_cn':
			ds_tw_cn_pageNum = 1;
			construct_ds_tw_cn_path();
			break;
		case 'ds_biezi':
			ds_biezi_pageNum = 1;
			construct_ds_biezi_path();
			break;
		case 'ds_hk_biz':
			ds_hk_biz_pageNum = 1;
			construct_ds_hk_biz_path();
			break;
		case 'ds_products':
			ds_products_pageNum = 1;
			construct_ds_products_path();
			break;
		case 'ds_photos':
			ds_photos_pageNum = 1;
			construct_ds_photos_path();
			break;
		case 'ds_biz_profiles':
			ds_biz_profiles_pageNum = 1;
			get_biz();
			break;
		case 'ds_dupbiz':
			ds_dupbiz_pageNum = 1;
			construct_ds_dupbiz_path();
			break;
		case 'ds_my_photos':
			$myPhotoGalleryPageNum = 1;
			get_photos();
			break;
		case 'ds_biz_search':
			ds_biz_search_pageNum = 1;
			construct_ds_biz_search_path();
			break;
		case 'ds_addresses':
			$bizAddrPageNum = 1;
			get_business();
			break;
		case 'ds_reviews':
			$myReviewsPageNum = 1;
			get_reviews();
			break;
		case 'ds_blogs':
			$myBlogsPageNum = 1;
			get_blogs();
			break;
		case 'ds_fav_list':
			$favListPageNum = 1;
			get_fav_lists();
			break;
		case 'ds_my_friends':
			$myFriendsPageNum = 1;
			get_friends();
			break;
		case 'ds_users':
			$usersPageNum = 1;
			get_users();
			break;
		case 'ds_requests':
			$requestsPageNum = 1;
			get_requests();
			break;
		case 'ds_messages':
			$messagesPageNum = 1;
			get_messages();
			break;
		case 'ds_biz_results':
			$bizResultsPageNum = 1;
			get_biz_matches(false);
			break;
		case 'ds_banner_photos':
			$bannerPhotoPageNum = 1;
			get_photos('banner');
			break;
		case 'ds_non_banner_photos':
			$nonBannerPhotoPageNum = 1;
			get_photos('non_banner');
			break;
	}
}

function previous_page(dataset_name) {
	switch (dataset_name) {
		case 'ds_tags':
			ds_tags_pageNum = (ds_tags_pageNum<=1?1:ds_tags_pageNum-1);
			construct_ds_tags_path();
			break;
		case 'ds_hk_streets':
			$hkStreetsPageNum = ($hkStreetsPageNum<=1?1:$hkStreetsPageNum-1);
			get_streets();
			break;
		case 'ds_hk_buildings':
			$hkBuildingsPageNum = ($hkBuildingsPageNum<=1?1:$hkBuildingsPageNum-1);
			get_buildings();
			break;
		case 'ds_hk_districts':
			$hkDistrictsPageNum = ($hkDistrictsPageNum<=1?1:$hkDistrictsPageNum-1);
			get_districts();
			break;
		case 'ds_tw_cn':
			ds_tw_cn_pageNum = (ds_tw_cn_pageNum<=1?1:ds_tw_cn_pageNum-1);
			construct_ds_tw_cn_path();
			break;
		case 'ds_biezi':
			ds_biezi_pageNum = (ds_biezi_pageNum<=1?1:ds_biezi_pageNum-1);
			construct_ds_biezi_path();
			break;
		case 'ds_hk_biz':
			ds_hk_biz_pageNum = (ds_hk_biz_pageNum<=1?1:ds_hk_biz_pageNum-1);
			construct_ds_hk_biz_path();
			break;
		case 'ds_products':
			ds_products_pageNum = (ds_products_pageNum<=1?1:ds_products_pageNum-1);
			construct_ds_products_path();
			break;
		case 'ds_photos':
			ds_photos_pageNum = (ds_photos_pageNum<=1?1:ds_photos_pageNum-1);
			construct_ds_photos_path();
			break;
		case 'ds_biz_profiles':
			ds_biz_profiles_pageNum = (ds_biz_profiles_pageNum<=1?1:ds_biz_profiles_pageNum-1);
			get_biz();
			break;
		case 'ds_dupbiz':
			ds_dupbiz_pageNum = (ds_dupbiz_pageNum<=1?1:ds_dupbiz_pageNum-1);
			construct_ds_dupbiz_path();
			break;
		case 'ds_my_photos':
			$myPhotoGalleryPageNum = ($myPhotoGalleryPageNum<=1?1:$myPhotoGalleryPageNum-1);
			get_photos();
			break;
		case 'ds_biz_search':
			ds_biz_search_pageNum = (ds_biz_search_pageNum<=1?1:ds_biz_search_pageNum-1);
			construct_ds_biz_search_path();
			break;
		case 'ds_addresses':
			$bizAddrPageNum = ($bizAddrPageNum<=1?1:$bizAddrPageNum-1);
			get_business();
			break;
		case 'ds_reviews':
			$myReviewsPageNum = ($myReviewsPageNum<=1?1:$myReviewsPageNum-1);
			get_reviews();
			break;
		case 'ds_blogs':
			$myBlogsPageNum = ($myBlogsPageNum<=1?1:$myBlogsPageNum-1);
			get_blogs();
			break;
		case 'ds_fav_list':
			$favListPageNum = ($favListPageNum<=1?1:$favListPageNum-1);
			get_fav_lists();
			break;
		case 'ds_my_friends':
			$myFriendsPageNum = ($myFriendsPageNum<=1?1:$myFriendsPageNum-1);
			get_friends();
			break;
		case 'ds_users':
			$usersPageNum = ($usersPageNum<=1?1:$usersPageNum-1);
			get_users();
			break;
		case 'ds_requests':
			$requestsPageNum = ($requestsPageNum<=1?1:$requestsPageNum-1);
			get_requests();
			break;
		case 'ds_messages':
			$messagesPageNum = ($messagesPageNum<=1?1:$messagesPageNum-1);
			get_messages();
			break;
		case 'ds_biz_results':
			$bizResultsPageNum = ($bizResultsPageNum<=1?1:$bizResultsPageNum-1);
			get_biz_matches(false);
			break;
		case 'ds_banner_photos':
			$bannerPhotoPageNum = ($bannerPhotoPageNum<=1?1:$bannerPhotoPageNum-1);
			get_photos('banner');
			break;
		case 'ds_non_banner_photos':
			$nonBannerPhotoPageNum = ($nonBannerPhotoPageNum<=1?1:$nonBannerPhotoPageNum-1);
			get_photos('non_banner');
			break;
	}
}

function next_page(dataset_name) {
	var last_page;
	switch (dataset_name) {
		case 'ds_tags':
			last_page = Math.floor(ds_tags_main.getCurrentRow()['total']/ds_tags_pageSize)+1;
			ds_tags_pageNum = (ds_tags_pageNum>=last_page?last_page:ds_tags_pageNum+1);
			construct_ds_tags_path();
			break;
		case 'ds_hk_streets':
			last_page = Math.floor(ds_hk_streets_main.getCurrentRow()['total']/$hkStreetsPageSize)+1;
			$hkStreetsPageNum = ($hkStreetsPageNum>=last_page?last_page:$hkStreetsPageNum+1);
			get_streets();
			break;
		case 'ds_hk_buildings':
			last_page = Math.floor(ds_hk_buildings_main.getCurrentRow()['total']/$hkBuildingsPageSize)+1;
			$hkBuildingsPageNum = ($hkBuildingsPageNum>=last_page?last_page:$hkBuildingsPageNum+1);
			get_buildings();
			break;
		case 'ds_hk_districts':
			last_page = Math.floor(ds_hk_districts_main.getCurrentRow()['total']/$hkDistrictsPageSize)+1;
			$hkDistrictsPageNum = ($hkDistrictsPageNum>=last_page?last_page:$hkDistrictsPageNum+1);
			get_districts();
			break;
		case 'ds_tw_cn':
			last_page = Math.floor(ds_tw_cn_main.getCurrentRow()['total']/ds_tw_cn_pageSize)+1;
			ds_tw_cn_pageNum = (ds_tw_cn_pageNum>=last_page?last_page:ds_tw_cn_pageNum+1);
			construct_ds_tw_cn_path();
			break;
		case 'ds_biezi':
			last_page = Math.floor(ds_biezi_main.getCurrentRow()['total']/ds_biezi_pageSize)+1;
			ds_biezi_pageNum = (ds_biezi_pageNum>=last_page?last_page:ds_biezi_pageNum+1);
			construct_ds_biezi_path();
			break;
		case 'ds_hk_biz':
			last_page = Math.floor(ds_hk_biz_main.getCurrentRow()['total']/ds_hk_biz_pageSize)+1;
			ds_hk_biz_pageNum = (ds_hk_biz_pageNum>=last_page?last_page:ds_hk_biz_pageNum+1);
			construct_ds_hk_biz_path();
			break;
		case 'ds_products':
			last_page = Math.floor(ds_products_main.getCurrentRow()['total']/ds_products_pageSize)+1;
			ds_products_pageNum = (ds_products_pageNum>=last_page?last_page:ds_products_pageNum+1);
			construct_ds_products_path();
			break;
		case 'ds_photos':
			last_page = Math.floor(ds_photos_main.getCurrentRow()['total']/ds_photos_pageSize)+1;
			ds_photos_pageNum = (ds_photos_pageNum>=last_page?last_page:ds_photos_pageNum+1);
			construct_ds_photos_path();
			break;
		case 'ds_biz_profiles':
			last_page = Math.floor(ds_biz_profiles_main.getCurrentRow()['total']/ds_biz_profiles_pageSize)+1;
			ds_biz_profiles_pageNum = (ds_biz_profiles_pageNum>=last_page?last_page:ds_biz_profiles_pageNum+1);
			get_biz();
			break;
		case 'ds_dupbiz':
			last_page = Math.floor(ds_dupbiz_main.getCurrentRow()['total']/ds_dupbiz_pageSize)+1;
			ds_dupbiz_pageNum = (ds_dupbiz_pageNum>=last_page?last_page:ds_dupbiz_pageNum+1);
			construct_ds_dupbiz_path();
			break;
		case 'ds_my_photos':
			last_page = Math.floor(ds_my_photos_main.getCurrentRow()['total']/$myPhotoGalleryPageSize)+1;
			$myPhotoGalleryPageNum = ($myPhotoGalleryPageNum>=last_page?last_page:$myPhotoGalleryPageNum+1);
			get_photos();
			break;
		case 'ds_biz_search':
			last_page = Math.floor(ds_biz_search_main.getCurrentRow()['total']/ds_biz_search_pageSize)+1;
			ds_biz_search_pageNum = (ds_biz_search_pageNum>=last_page?last_page:ds_biz_search_pageNum+1);
			construct_ds_biz_search_path();
			break;
		case 'ds_addresses':
			last_page = Math.floor(ds_addresses_main.getCurrentRow()['total']/$bizAddrPageSize)+1;
			$bizAddrPageNum = ($bizAddrPageNum>=last_page?last_page:$bizAddrPageNum+1);
			get_business();
			break;
		case 'ds_reviews':
			last_page = Math.floor(ds_reviews_main.getCurrentRow()['total']/$myReviewsPageSize)+1;
			$myReviewsPageNum = ($myReviewsPageNum>=last_page?last_page:$myReviewsPageNum+1);
			get_reviews();
			break;
		case 'ds_blogs':
			last_page = Math.floor(ds_blogs_main.getCurrentRow()['total']/$myBlogsPageSize)+1;
			$myBlogsPageNum = ($myBlogsPageNum>=last_page?last_page:$myBlogsPageNum+1);
			get_blogs();
			break;
		case 'ds_fav_list':
			last_page = Math.floor(ds_fav_list_main.getCurrentRow()['total']/$favListPageSize)+1;
			$favListPageNum = ($favListPageNum>=last_page?last_page:$favListPageNum+1);
			get_fav_lists();
			break;
		case 'ds_my_friends':
			last_page = Math.floor(ds_my_friends_main.getCurrentRow()['total']/$myFriendsPageSize)+1;
			$myFriendsPageNum = ($myFriendsPageNum>=last_page?last_page:$myFriendsPageNum+1);
			get_friends();
			break;
		case 'ds_users':
			last_page = Math.floor(ds_users_main.getCurrentRow()['total']/$usersPageSize)+1;
			$usersPageNum = ($usersPageNum>=last_page?last_page:$usersPageNum+1);
			get_users();
			break;
		case 'ds_requests':
			last_page = Math.floor(ds_requests_main.getCurrentRow()['total']/$requestsPageSize)+1;
			$requestsPageNum = ($requestsPageNum>=last_page?last_page:$requestsPageNum+1);
			get_requests();
			break;
		case 'ds_messages':
			last_page = Math.floor(ds_messages_main.getCurrentRow()['total']/$messagesPageSize)+1;
			$messagesPageNum = ($messagesPageNum>=last_page?last_page:$messagesPageNum+1);
			get_messages();
			break;
		case 'ds_biz_results':
			last_page = Math.floor(ds_biz_results_main.getCurrentRow()['total']/$bizResultsPageSize)+1;
			$bizResultsPageNum = ($bizResultsPageNum>=last_page?last_page:$bizResultsPageNum+1);
			get_biz_matches(false);
			break;
		case 'ds_banner_photos':
			last_page = Math.floor(ds_banner_photos_main.getCurrentRow()['total']/$bannerPhotoPageSize)+1;
			$bannerPhotoPageNum = ($bannerPhotoPageNum>=last_page?last_page:$bannerPhotoPageNum+1);
			get_photos('banner');
			break;
		case 'ds_non_banner_photos':
			last_page = Math.floor(ds_non_banner_photos_main.getCurrentRow()['total']/$nonBannerPhotoPageSize)+1;
			$nonBannerPhotoPageNum = ($nonBannerPhotoPageNum>=last_page?last_page:$nonBannerPhotoPageNum+1);
			get_photos('non_banner');
			break;
	}
}

function last_page(dataset_name) {
	var last_page;
	switch (dataset_name) {
		case 'ds_tags':
			last_page = Math.floor(ds_tags_main.getCurrentRow()['total']/ds_tags_pageSize)+1;
			ds_tags_pageNum = last_page;
			construct_ds_tags_path();
			break;
		case 'ds_hk_streets':
			last_page = Math.floor(ds_hk_streets_main.getCurrentRow()['total']/$hkStreetsPageSize)+1;
			$hkStreetsPageNum = last_page;
			get_streets();
			break;
		case 'ds_hk_buildings':
			last_page = Math.floor(ds_hk_buildings_main.getCurrentRow()['total']/$hkBuildingsPageSize)+1;
			$hkBuildingsPageNum = last_page;
			get_buildings();
			break;
		case 'ds_hk_districts':
			last_page = Math.floor(ds_hk_districts_main.getCurrentRow()['total']/$hkDistrictsPageSize)+1;
			$hkDistrictsPageNum = last_page;
			get_districts();
			break;
		case 'ds_tw_cn':
			last_page = Math.floor(ds_tw_cn_main.getCurrentRow()['total']/ds_tw_cn_pageSize)+1;
			ds_tw_cn_pageNum = last_page;
			construct_ds_tw_cn_path();
			break;
		case 'ds_biezi':
			last_page = Math.floor(ds_biezi_main.getCurrentRow()['total']/ds_biezi_pageSize)+1;
			ds_biezi_pageNum = last_page;
			construct_ds_biezi_path();
			break;
		case 'ds_hk_biz':
			last_page = Math.floor(ds_hk_biz_main.getCurrentRow()['total']/ds_hk_biz_pageSize)+1;
			ds_hk_biz_pageNum = last_page;
			construct_ds_hk_biz_path();
			break;
		case 'ds_products':
			last_page = Math.floor(ds_products_main.getCurrentRow()['total']/ds_products_pageSize)+1;
			ds_products_pageNum = last_page;
			construct_ds_products_path();
			break;
		case 'ds_photos':
			last_page = Math.floor(ds_photos_main.getCurrentRow()['total']/ds_photos_pageSize)+1;
			ds_photos_pageNum = last_page;
			construct_ds_photos_path();
			break;
		case 'ds_biz_profiles':
			last_page = Math.floor(ds_biz_profiles_main.getCurrentRow()['total']/ds_biz_profiles_pageSize)+1;
			ds_biz_profiles_pageNum = last_page;
			get_biz();
			break;
		case 'ds_dupbiz':
			last_page = Math.floor(ds_dupbiz_main.getCurrentRow()['total']/ds_dupbiz_pageSize)+1;
			ds_dupbiz_pageNum = last_page;
			construct_ds_dupbiz_path();
			break;
		case 'ds_my_photos':
			last_page = Math.floor(ds_my_photos_main.getCurrentRow()['total']/$myPhotoGalleryPageSize)+1;
			$myPhotoGalleryPageNum = last_page;
			get_photos();
			break;
		case 'ds_biz_search':
			last_page = Math.floor(ds_biz_search_main.getCurrentRow()['total']/ds_biz_search_pageSize)+1;
			ds_biz_search_pageNum = last_page;
			construct_ds_biz_search_path();
			break;
		case 'ds_addresses':
			last_page = Math.floor(ds_addresses_main.getCurrentRow()['total']/$bizAddrPageSize)+1;
			$bizAddrPageNum = last_page;
			get_business();
			break;
		case 'ds_reviews':
			last_page = Math.floor(ds_reviews_main.getCurrentRow()['total']/$myReviewsPageSize)+1;
			$myReviewsPageNum = last_page;
			get_reviews();
			break;
		case 'ds_blogs':
			last_page = Math.floor(ds_blogs_main.getCurrentRow()['total']/$myBlogsPageSize)+1;
			$myBlogsPageNum = last_page;
			get_blogs();
			break;
		case 'ds_fav_list':
			last_page = Math.floor(ds_fav_list_main.getCurrentRow()['total']/$favListPageSize)+1;
			$favListPageNum = last_page;
			get_fav_lists();
			break;
		case 'ds_my_friends':
			last_page = Math.floor(ds_my_friends_main.getCurrentRow()['total']/$myFriendsPageSize)+1;
			$myFriendsPageNum = last_page;
			get_friends();
			break;
		case 'ds_users':
			last_page = Math.floor(ds_users_main.getCurrentRow()['total']/$usersPageSize)+1;
			$usersPageNum = last_page;
			get_users();
			break;
		case 'ds_requests':
			last_page = Math.floor(ds_requests_main.getCurrentRow()['total']/$requestsPageSize)+1;
			$requestsPageNum = last_page;
			get_requests();
			break;
		case 'ds_messages':
			last_page = Math.floor(ds_messages_main.getCurrentRow()['total']/$messagesPageSize)+1;
			$messagesPageNum = last_page;
			get_messages();
			break;
		case 'ds_biz_results':
			last_page = Math.floor(ds_biz_results_main.getCurrentRow()['total']/$bizResultsPageSize)+1;
			$bizResultsPageNum = last_page;
			get_biz_matches(false);
			break;
		case 'ds_banner_photos':
			last_page = Math.floor(ds_banner_photos_main.getCurrentRow()['total']/$bannerPhotoPageSize)+1;
			$bannerPhotoPageNum = last_page;
			get_photos('banner');
			break;
		case 'ds_non_banner_photos':
			last_page = Math.floor(ds_non_banner_photos_main.getCurrentRow()['total']/$nonBannerPhotoPageSize)+1;
			$nonBannerPhotoPageNum = last_page;
			get_photos('non_banner');
			break;
	}
}
*/
/*
function goto_page(dataset_name,pagenum) {
	var last_page;
	if (isNaN(pagenum)) {
		switch (GB_Language) {
			case 'tw': window.alert('你輸入的不是數字'); break;
			case 'cn': window.alert('你输入的不是数字'); break;
			case 'en': default: window.alert('You did not enter a number'); break;
		}
		return false;
	}
	switch (dataset_name) {
		case 'ds_tags':
			last_page = Math.floor(ds_tags_main.getCurrentRow()['total']/ds_tags_pageSize)+1;
			ds_tags_pageNum = Math.max(Math.min(pagenum,last_page),1);
			construct_ds_tags_path();
			break;
		case 'ds_hk_streets':
			last_page = Math.floor(ds_hk_streets_main.getCurrentRow()['total']/$hkStreetsPageSize)+1;
			$hkStreetsPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_streets();
			break;
		case 'ds_hk_buildings':
			last_page = Math.floor(ds_hk_buildings_main.getCurrentRow()['total']/$hkBuildingsPageSize)+1;
			$hkBuildingsPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_buildings();
			break;
		case 'ds_hk_districts':
			last_page = Math.floor(ds_hk_districts_main.getCurrentRow()['total']/$hkDistrictsPageSize)+1;
			$hkDistrictsPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_districts();
			break;
		case 'ds_tw_cn':
			last_page = Math.floor(ds_tw_cn_main.getCurrentRow()['total']/ds_tw_cn_pageSize)+1;
			ds_tw_cn_pageNum = Math.max(Math.min(pagenum,last_page),1);
			construct_ds_tw_cn_path();
			break;
		case 'ds_biezi':
			last_page = Math.floor(ds_biezi_main.getCurrentRow()['total']/ds_biezi_pageSize)+1;
			ds_biezi_pageNum = Math.max(Math.min(pagenum,last_page),1);
			construct_ds_biezi_path();
			break;
		case 'ds_hk_biz':
			last_page = Math.floor(ds_hk_biz_main.getCurrentRow()['total']/ds_hk_biz_pageSize)+1;
			ds_hk_biz_pageNum = Math.max(Math.min(pagenum,last_page),1);
			construct_ds_hk_biz_path();
			break;
		case 'ds_products':
			last_page = Math.floor(ds_products_main.getCurrentRow()['total']/ds_products_pageSize)+1;
			ds_products_pageNum = Math.max(Math.min(pagenum,last_page),1);
			construct_ds_products_path();
			break;
		case 'ds_photos':
			last_page = Math.floor(ds_photos_main.getCurrentRow()['total']/ds_photos_pageSize)+1;
			ds_photos_pageNum = Math.max(Math.min(pagenum,last_page),1);
			construct_ds_photos_path();
			break;
		case 'ds_biz_profiles':
			last_page = Math.floor(ds_biz_profiles_main.getCurrentRow()['total']/ds_biz_profiles_pageSize)+1;
			ds_biz_profiles_pageNum = Math.max(Math.min(pagenum,last_page),1);
			get_biz();
			break;
		case 'ds_dupbiz':
			last_page = Math.floor(ds_dupbiz_main.getCurrentRow()['total']/ds_dupbiz_pageSize)+1;
			ds_dupbiz_pageNum = Math.max(Math.min(pagenum,last_page),1);
			construct_ds_dupbiz_path();
			break;
		case 'ds_my_photos':
			last_page = Math.floor(ds_my_photos_main.getCurrentRow()['total']/$myPhotoGalleryPageSize)+1;
			$myPhotoGalleryPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_photos();
			break;
		case 'ds_biz_search':
			last_page = Math.floor(ds_biz_search_main.getCurrentRow()['total']/ds_biz_search_pageSize)+1;
			ds_biz_search_pageNum = Math.max(Math.min(pagenum,last_page),1);
			construct_ds_biz_search_path();
			break;
		case 'ds_addresses':
			last_page = Math.floor(ds_addresses_main.getCurrentRow()['total']/$bizAddrPageSize)+1;
			$bizAddrPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_business();
			break;
		case 'ds_reviews':
			last_page = Math.floor(ds_reviews_main.getCurrentRow()['total']/$myReviewsPageSize)+1;
			$myReviewsPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_reviews();
			break;
		case 'ds_blogs':
			last_page = Math.floor(ds_blogs_main.getCurrentRow()['total']/$myBlogsPageSize)+1;
			$myBlogsPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_blogs();
			break;
		case 'ds_fav_list':
			last_page = Math.floor(ds_fav_list_main.getCurrentRow()['total']/$favListPageSize)+1;
			$favListPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_fav_lists();
			break;
		case 'ds_my_friends':
			last_page = Math.floor(ds_my_friends_main.getCurrentRow()['total']/$myFriendsPageSize)+1;
			$myFriendsPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_friends();
			break;
		case 'ds_users':
			last_page = Math.floor(ds_users_main.getCurrentRow()['total']/$usersPageSize)+1;
			$usersPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_users();
			break;
		case 'ds_requests':
			last_page = Math.floor(ds_requests_main.getCurrentRow()['total']/$requestsPageSize)+1;
			$requestsPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_requests();
			break;
		case 'ds_messages':
			last_page = Math.floor(ds_messages_main.getCurrentRow()['total']/$messagesPageSize)+1;
			$messagesPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_messages();
			break;
		case 'ds_biz_results':
			last_page = Math.floor(ds_biz_results_main.getCurrentRow()['total']/$bizResultsPageSize)+1;
			$bizResultsPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_biz_matches(false);
			break;
		case 'ds_banner_photos':
			last_page = Math.floor(ds_banner_photos_main.getCurrentRow()['total']/$bannerPhotoPageSize)+1;
			$bannerPhotoPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_photos('banner');
			break;
		case 'ds_non_banner_photos':
			last_page = Math.floor(ds_non_banner_photos_main.getCurrentRow()['total']/$nonBannerPhotoPageSize)+1;
			$nonBannerPhotoPageNum = Math.max(Math.min(pagenum,last_page),1);
			get_photos('non_banner');
			break;
	}
}
*/
function get_language_label (language) {
	var language_label;
	switch (language) {
		case 'tw': language_label='繁'; break;
		case 'cn': language_label='简'; break;
		case 'ja': language_label='日'; break;
		case 'ko': language_label='한'; break;
		case 'en': language_label='en'; break;
		case 'de': language_label='de'; break;
		case 'es': language_label='es'; break;
		case 'pt': language_label='pt'; break;
		case 'fr': language_label='fr'; break;
	}
	return language_label;
}

function get_language_string (language_code, rtn_language) {
	var language_string;
	switch (rtn_language) {
		case 'tw':
			switch (language_code) {
				case 'tw': language_string = '繁體中文'; break;
				case 'cn': language_string = '簡體中文'; break;
				case 'ja': language_string = '日文'; break;
				case 'ko': language_string = '韓文'; break;
				case 'en': language_string = '英文'; break;
				case 'de': language_string = '德文'; break;
				case 'fr': language_string = '法文'; break;
				case 'es': language_string = '西班牙文'; break;
				case 'pt': language_string = '葡萄牙文'; break;
			}
			break;
		case 'cn':
			switch (language_code) {
				case 'tw': language_string = '繁体中文'; break;
				case 'cn': language_string = '简体中文'; break;
				case 'ja': language_string = '日文'; break;
				case 'ko': language_string = '韩文'; break;
				case 'en': language_string = '英文'; break;
				case 'de': language_string = '德文'; break;
				case 'fr': language_string = '法文'; break;
				case 'es': language_string = '西班牙文'; break;
				case 'pt': language_string = '葡萄牙文'; break;
			}
			break;
		case 'ja': 
			switch (language_code) {
				case 'tw': language_string = '繁体字中国語'; break;
				case 'cn': language_string = '簡体字中国語'; break;
				case 'ja': language_string = '日本語'; break;
				case 'ko': language_string = '韓国語'; break;
				case 'en': language_string = '英語'; break;
				case 'de': language_string = 'ドイツ語'; break;
				case 'fr': language_string = 'フランス語'; break;
				case 'es': language_string = 'スペイン語'; break;
				case 'pt': language_string = 'ポルトガル語'; break;
			}
			break;
		case 'ko': 
			switch (language_code) {
				case 'tw': language_string = '중국어 번체'; break;
				case 'cn': language_string = '중국어 간체'; break;
				case 'ja': language_string = '일본어'; break;
				case 'ko': language_string = '한국어'; break;
				case 'en': language_string = '영어'; break;
				case 'de': language_string = '독일어'; break;
				case 'fr': language_string = '프랑스어'; break;
				case 'es': language_string = '스페인어'; break;
				case 'pt': language_string = '포르투갈어'; break;
			}
			break;
		case 'de': 
			switch (language_code) {
				case 'tw': language_string = 'traditionelles Chinesisch'; break;
				case 'cn': language_string = 'vereinfachtes Chinesisch'; break;
				case 'ja': language_string = 'Japanisch'; break;
				case 'ko': language_string = 'Koreanisch'; break;
				case 'en': language_string = 'Englisch'; break;
				case 'de': language_string = 'Deutsch'; break;
				case 'fr': language_string = 'Französisch'; break;
				case 'es': language_string = 'Spanisch'; break;
				case 'pt': language_string = 'Portugiesisch'; break;
			}
			break;
		case 'fr': 
			switch (language_code) {
				case 'tw': language_string = 'traditionnelle chinoise'; break;
				case 'cn': language_string = 'chinois simplifié'; break;
				case 'ja': language_string = 'japonais'; break;
				case 'ko': language_string = 'coréen'; break;
				case 'en': language_string = 'anglais'; break;
				case 'de': language_string = 'allemand'; break;
				case 'fr': language_string = 'français'; break;
				case 'es': language_string = 'espagnol'; break;
				case 'pt': language_string = 'portugais'; break;
			}
			break;
		case 'es': 
			switch (language_code) {
				case 'tw': language_string = 'chino tradicional'; break;
				case 'cn': language_string = 'chino simplificado'; break;
				case 'ja': language_string = 'japonés'; break;
				case 'ko': language_string = 'coreano'; break;
				case 'en': language_string = 'inglés'; break;
				case 'de': language_string = 'alemán'; break;
				case 'fr': language_string = 'francés'; break;
				case 'es': language_string = 'español'; break;
				case 'pt': language_string = 'portugués'; break;
			}
			break;
		case 'en': default:
			switch (language_code) {
				case 'tw': language_string = 'Traditional Chinese'; break;
				case 'cn': language_string = 'Simplified Chinese'; break;
				case 'ja': language_string = 'Japanese'; break;
				case 'ko': language_string = 'Korean'; break;
				case 'en': language_string = 'English'; break;
				case 'de': language_string = 'German'; break;
				case 'fr': language_string = 'French'; break;
				case 'es': language_string = 'Spanish'; break;
				case 'pt': language_string = 'Portuguese'; break;
			}
			break;
	}
	return language_string;
}

function get_country_name (language_code, country_code) {
	var country_name;
	switch (language_code) {
		case 'tw': 
			switch (country_code) {
				case 'at': country_name='奧地利'; break;
				case 'au': country_name='澳洲'; break;
				case 'br': country_name='巴西'; break;
				case 'ca': country_name='加拿大'; break;
				case 'ch': country_name='瑞士'; break;
				case 'cn': country_name='中國大陸'; break;
				case 'de': country_name='德國'; break;
				case 'hk': country_name='香港'; break;
				case 'es': country_name='西班牙'; break;
				case 'fr': country_name='法國'; break;
				case 'jp': country_name='日本'; break;
				case 'kr': country_name='南韓'; break;
				case 'mo': country_name='澳門'; break;
				case 'pt': country_name='葡萄牙'; break;
				case 'tw': country_name='台灣'; break;
				case 'uk': country_name='英國'; break;
				case 'us': country_name='美國'; break;
			}
			break;
		case 'cn': 
			switch (country_code) {
				case 'at': country_name='奥地利'; break;
				case 'au': country_name='澳洲'; break;
				case 'br': country_name='巴西'; break;
				case 'ca': country_name='加拿大'; break;
				case 'ch': country_name='瑞士'; break;
				case 'cn': country_name='中国'; break;
				case 'de': country_name='德国'; break;
				case 'hk': country_name='香港'; break;
				case 'es': country_name='西班牙'; break;
				case 'fr': country_name='法国'; break;
				case 'jp': country_name='日本'; break;
				case 'kr': country_name='南韩'; break;
				case 'mo': country_name='澳门'; break;
				case 'pt': country_name='葡萄牙'; break;
				case 'tw': country_name='台湾'; break;
				case 'uk': country_name='英国'; break;
				case 'us': country_name='美国'; break;
			}
			break;
		case 'ja': 
			switch (country_code) {
				case 'at': country_name='オーストリア'; break;
				case 'au': country_name='オーストラリア'; break;
				case 'br': country_name='ブラジル'; break;
				case 'ca': country_name='カナダ'; break;
				case 'ch': country_name='スイス'; break;
				case 'cn': country_name='中国'; break;
				case 'de': country_name='ドイツ'; break;
				case 'hk': country_name='香港'; break;
				
				case 'es': country_name='Spain'; break;
				case 'fr': country_name='France'; break;
				case 'jp': country_name='Japan'; break;
				case 'kr': country_name='South Korea'; break;
				case 'mo': country_name='Macau'; break;
				case 'pt': country_name='Portugal'; break;
				case 'tw': country_name='Taiwan'; break;
				case 'uk': country_name='United Kingdom'; break;
				case 'us': country_name='USA'; break;
			}
			break;
		case 'ko': 
			switch (country_code) {
				case 'at': country_name='오스트리아'; break;
				case 'au': country_name='오스트 레일 리아'; break;
				case 'br': country_name='브라질'; break;
				case 'ca': country_name='캐나다'; break;
				case 'ch': country_name='스위스'; break;
				case 'cn': country_name='중국'; break;
				case 'de': country_name='독일'; break;
				case 'hk': country_name='홍콩'; break;
				
				case 'es': country_name='Spain'; break;
				case 'fr': country_name='France'; break;
				case 'jp': country_name='Japan'; break;
				case 'kr': country_name='South Korea'; break;
				case 'mo': country_name='Macau'; break;
				case 'pt': country_name='Portugal'; break;
				case 'tw': country_name='Taiwan'; break;
				case 'uk': country_name='United Kingdom'; break;
				case 'us': country_name='USA'; break;
			}
			break;
		case 'fr': 
			switch (country_code) {
				case 'at': country_name='Autriche'; break;
				case 'au': country_name='Australie'; break;
				case 'br': country_name='Brésil'; break;
				case 'ca': country_name='Canada'; break;
				case 'ch': country_name='Suisse'; break;
				case 'cn': country_name='Chine'; break;
				case 'de': country_name='Allemagne'; break;
				case 'hk': country_name='Hong Kong'; break;
				
				case 'es': country_name='Spain'; break;
				case 'fr': country_name='France'; break;
				case 'jp': country_name='Japan'; break;
				case 'kr': country_name='South Korea'; break;
				case 'mo': country_name='Macau'; break;
				case 'pt': country_name='Portugal'; break;
				case 'tw': country_name='Taiwan'; break;
				case 'uk': country_name='United Kingdom'; break;
				case 'us': country_name='USA'; break;
			}
			break;
		case 'de': 
			switch (country_code) {
				case 'at': country_name='Österreich'; break;
				case 'au': country_name='Australien'; break;
				case 'br': country_name='Brasilien'; break;
				case 'ca': country_name='Kanada'; break;
				case 'ch': country_name='Schweiz'; break;
				case 'cn': country_name='China'; break;
				case 'de': country_name='Deutschland'; break;
				case 'hk': country_name='Hong Kong'; break;
				
				case 'es': country_name='Spain'; break;
				case 'fr': country_name='France'; break;
				case 'jp': country_name='Japan'; break;
				case 'kr': country_name='South Korea'; break;
				case 'mo': country_name='Macau'; break;
				case 'pt': country_name='Portugal'; break;
				case 'tw': country_name='Taiwan'; break;
				case 'uk': country_name='United Kingdom'; break;
				case 'us': country_name='USA'; break;
			}
			break;
		case 'es': 
			switch (country_code) {
				case 'at': country_name='Austria'; break;
				case 'au': country_name='Australia'; break;
				case 'br': country_name='Brazil'; break;
				case 'ca': country_name='Canadá'; break;
				case 'ch': country_name='Suiza'; break;
				case 'cn': country_name='China'; break;
				case 'de': country_name='Alemania'; break;
				case 'hk': country_name='Hong Kong'; break;
				
				case 'es': country_name='Spain'; break;
				case 'fr': country_name='France'; break;
				case 'jp': country_name='Japan'; break;
				case 'kr': country_name='South Korea'; break;
				case 'mo': country_name='Macau'; break;
				case 'pt': country_name='Portugal'; break;
				case 'tw': country_name='Taiwan'; break;
				case 'uk': country_name='United Kingdom'; break;
				case 'us': country_name='USA'; break;
			}
			break;
		case 'en': default: 
			switch (country_code) {
				case 'at': country_name='Austria'; break;
				case 'au': country_name='Australia'; break;
				case 'br': country_name='Brazil'; break;
				case 'ca': country_name='Canada'; break;
				case 'ch': country_name='Switzerland'; break;
				case 'cn': country_name='China'; break;
				case 'de': country_name='Germany'; break;
				case 'hk': country_name='Hong Kong'; break;
				
				case 'es': country_name='Spain'; break;
				case 'fr': country_name='France'; break;
				case 'jp': country_name='Japan'; break;
				case 'kr': country_name='South Korea'; break;
				case 'mo': country_name='Macau'; break;
				case 'pt': country_name='Portugal'; break;
				case 'tw': country_name='Taiwan'; break;
				case 'uk': country_name='United Kingdom'; break;
				case 'us': country_name='USA'; break;
			}
			break;
	}
	return country_name;
}

function get_countries(language_code,country_object) {
	var index = 0;
	var num_countries = country_object.length;
	var country_string = '';
	if (index<num_countries) {
		country_string += get_country_name (language_code, country_object[index]);
		index += 1;
	}
	while (index<num_countries) {
		country_string += ', '+get_country_name (language_code, country_object[index]);
		index += 1;
	}
	return country_string;
}

function get_language_image (language) {
	var language_image;
	switch (language) {
		case 'en': language_image = '/artwork/en_square.png'; break;
		case 'tw': language_image = '/artwork/tw_square.png'; break;
		case 'cn': language_image = '/artwork/cn_square.png'; break;
		case 'ja': language_image = '/artwork/ja_square.png'; break;
		case 'de': language_image = '/artwork/de_square.png'; break;
		case 'ko': language_image = '/artwork/ko_square.png'; break;
		case 'es': language_image = '/artwork/es_square.png'; break;
		case 'pt': language_image = '/artwork/pt_square.png'; break;
		case 'fr': language_image = '/artwork/fr_square.png'; break;
		default: language_image = ''; break;
	}
	return language_image;
}

function show_error_message (error_div,error_title,error_message) {
	var button_object = new Object;
	$j('#'+error_div).dialog('option','title',error_title);
	button_object[$defaultText['cancel']] = function() {$j(this).dialog('close');};
	$j('#'+error_div).dialog('option','buttons',button_object);
	$j('#'+error_div).html('<div class="topMargin16 FormDetailHeading">'+error_message+'</div>');
	$j('#'+error_div).dialog('open');
}

function show_info_message (info_div,info_title,info_message) {
	var button_object = new Object;
	$j('#'+info_div).dialog('option','title',info_title);
	button_object[$defaultText['okay']] = function() {$j(this).dialog('close');};
	$j('#'+info_div).dialog('option','buttons',button_object);
	$j('#'+info_div).html('<div class="topMargin16 FormDetailHeading">'+info_message+'</div>');
	$j('#'+info_div).dialog('open');
}

function build_product_language_content (language, is_original) {
	var org_lang_label,rmv_prod_lang_title,prod_name_label,prod_brf_desc_label,prod_desc_label;
	switch (language) {
		case 'tw': org_lang_label='本來語言';
					rmv_prod_lang_title='除去繁體資料';
					prod_name_label='商品／菜式：';
					prod_brf_desc_label='簡介／主要材料：';
					prod_desc_label='說明：';
					break;
		case 'cn': org_lang_label='本來语言';
					rmv_prod_lang_title='除去简体资料';
					prod_name_label='商品／菜式：';
					prod_brf_desc_label='简介／主要材料：';
					prod_desc_label='说明：';
					break;
		case 'ja': org_lang_label='オリジナルの言語';
					rmv_prod_lang_title='日本語情報を削除';
					prod_name_label='商品／シャーレ：';
					prod_brf_desc_label='簡単な説明／主な成分：';
					prod_desc_label='説明：';
					break;
		case 'en': org_lang_label='original lang';
					rmv_prod_lang_title='remove english information';
					prod_name_label='product/dish:';
					prod_brf_desc_label='brief desc/main ingrdnt:';
					prod_desc_label='desc:';
					break;
		case 'de': org_lang_label='Originalsprache';
					rmv_prod_lang_title='Deutsche Informationen entfernen';
					prod_name_label='produkt/Gericht:';
					prod_brf_desc_label='kurze B./Hauptzutaten:';
					prod_desc_label='Beschrbng.:';
					break;
	}
	var html_content = '<div class="Product_Details_Main_Language" id="Product_Language_Group_'+language+'">'+
			'<div style="float:right;">'+
			'<span>'+get_language_label(language)+'&nbsp;&nbsp;</span>'+
			'<label for="is_original_'+language+'" id="is_original_'+language+'_label" class="'+(is_original=='Y'?'FormRadioSelected':'')+'">'+org_lang_label+'</label>'+
			'<input id="is_original_'+language+'" name="is_original_'+language+'" type="radio" value="Y"'+(is_original=='Y'?' checked':'')+' onclick="select_original_language('+"'"+language+"'"+');"/>'+
			'<input name="remove_product_language_'+language+'" id="remove_product_language_'+language+'" type="button" value="x" onclick="remove_product_language('+"'"+language+"'"+');" title="'+rmv_prod_lang_title+'" style="font-size:0.7em"'+(is_original=='Y'?' disabled':'')+' tabindex="-1" /></div>'+
            '<label for="product_name_'+language+'" class="FormDetailHeading">'+prod_name_label+'</label>'+
            '<input type="text" name="product_name_'+language+'" id="product_name_'+language+'" size="40" />'+
			'<input name="add_alias_'+language+'" id="add_alias_'+language+'" type="button" value="+" style="font-size:0.7em" tabindex="-1" /><br />'+
			'<div id="product_alias_'+language+'_div"></div>'+
			'<label for="product_brief_description_'+language+'" class="FormDetailHeading">'+prod_brf_desc_label+'</label>'+
			'<input type="text" name="product_brief_description_'+language+'" id="product_brief_description_'+language+'" size="55" /><br />'+
			'<label for="product_description_'+language+'" class="FormDetailHeading" style="vertical-align:top">'+prod_desc_label+'</label>'+
			'<textarea name="product_description_'+language+'" id="product_description_'+language+'" cols="60" rows="6" ></textarea><br /></div>';
	
	return html_content;
}

function build_product_alias_content (language, alias_index) {
	var alias_label,rmv_alias_title;
	switch (language) {
		case 'tw': alias_label='別名 '; rmv_alias_title='除去繁體別名'; break;
		case 'cn': alias_label='別名 '; rmv_alias_title='除去简体別名'; break;
		case 'ja': alias_label='エイリアス '; rmv_alias_title='日本語のエイリアスを削除'; break;
		case 'en': alias_label='alias '; rmv_alias_title='remove english aliases'; break;
		case 'de': alias_label='Alias '; rmv_alias_title='Deutsche Aliase entfernen'; break;
	}
	var html_content = '<label for="product_alias_'+language+'_'+alias_index+'" id="product_alias_'+language+'_'+alias_index+'_label" class="FormDetailHeading">'+alias_label+alias_index+'：</label>'+
            '<input type="text" name="product_alias_'+language+'_'+alias_index+'" id="product_alias_'+language+'_'+alias_index+'" size="40" />'+
			'<input name="remove_alias_'+language+'_'+alias_index+'" id="remove_alias_'+language+'_'+alias_index+'" type="button" value="x" onclick="remove_product_alias('+"'"+language+"',"+alias_index+');" title="'+rmv_alias_title+'" style="font-size:0.7em" tabindex="-1" /><br />';
	
	return html_content;
}

function build_photo_TN (row_array, entity) {
	var photo_content;
	
	switch (row_array['ownership']) {
		case 'S': photo_content = '<div class="Photo_TN_Frame_Site">'; break;
		case 'B': photo_content = '<div class="Photo_TN_Frame_Biz">'; break;
		case 'U': default: photo_content = '<div class="Photo_TN_Frame">'; break;
	}
	photo_content += '<div><img class="Photo_TN_Img" src="../images/user_pix/tn_'+row_array['filename']+'" '+
		'alt="'+row_array['photo_description']+'" title="'+row_array['photo_description']+'" align="middle" /></div>'+
		'<a class="ui-icon ui-icon-image clickme" style="float:left; margin-top:5px;" onclick="set_main_photo(event,'+row_array['photo_id']+');"></a>'+
		'<a class="ui-icon ui-icon-close clickme" style="float:right; margin-top:5px;" onclick="remove_photo(event,'+row_array['photo_id']+');"></a>'+
		'<span class="FormDetailHeading">'+row_array['photo_id']+'</span></div>';
	return photo_content;
}

function get_map_accuracy(location_types) {
	var index = 0;
	var num_types = location_types.length;
	var accuracy=0, found=false;
	while (index<num_types && !found) {
		switch (location_types[index]) {
			case 'establishment': 
			case 'premise': 
			case 'subpremise': 
			case 'transit_station': 
			found=true; accuracy=9; break;
			case 'street_address': found=true; accuracy=8; break;
			case 'intersection': found=true; accuracy=7; break;
			case 'route': found=true; accuracy=6; break;
			case 'postal_code': found=true; accuracy=5; break;
			case 'sublocality': found=true; accuracy=4; break;
			case 'locality': found=true; accuracy=3; break;
			case 'administrative_area_level_1': 
			case 'administrative_area_level_2': 
			case 'administrative_area_level_3': found=true; accuracy=2; break;
			case 'country': found=true; accuracy=1; break;
		}
		index += 1;
	}
	return accuracy;
}

function get_geocode_accuracy_label (geocode_accuracy) {
	var accuracy_label;
	switch (GB_Language) {
		case 'tw':
			switch (geocode_accuracy) {
				case 0: accuracy_label='地址不詳'; break;
				case 1: accuracy_label='國家'; break;
				case 2: accuracy_label='州、省'; break;
				case 3: accuracy_label='市、鎮、村'; break;
				case 4: accuracy_label='市區、地區'; break;
				case 5: accuracy_label='郵政編號'; break;
				case 6: accuracy_label='街道名稱'; break;
				case 7: accuracy_label='最近街道交界'; break;
				case 8: accuracy_label='街道門牌'; break;
				case 9: accuracy_label='大廈、商場'; break;
				case 10: accuracy_label='手動設定'; break;
			}; break;
		case 'cn':
			switch (geocode_accuracy) {
				case 0: accuracy_label='地址不详'; break;
				case 1: accuracy_label='国家'; break;
				case 2: accuracy_label='州、省'; break;
				case 3: accuracy_label='市、镇、村'; break;
				case 4: accuracy_label='市区、地区'; break;
				case 5: accuracy_label='邮政编码'; break;
				case 6: accuracy_label='街道名称'; break;
				case 7: accuracy_label='最近街道交界'; break;
				case 8: accuracy_label='街道门牌'; break;
				case 9: accuracy_label='大厦、商场'; break;
				case 10: accuracy_label='手动设定'; break;
			}; break;
		case 'en': default:
			switch (geocode_accuracy) {
				case 0: accuracy_label='address unknown'; break;
				case 1: accuracy_label='country'; break;
				case 2: accuracy_label='state/province'; break;
				case 3: accuracy_label='county/municipality'; break;
				case 4: accuracy_label='city/town/village'; break;
				case 5: accuracy_label='postcode/zip code'; break;
				case 6: accuracy_label='street name'; break;
				case 7: accuracy_label='nearest intersection'; break;
				case 8: accuracy_label='street number'; break;
				case 9: accuracy_label='building'; break;
				case 10: accuracy_label='manual'; break;
			}; break;
	}
	return accuracy_label;
}

function check_website_format (website_selector) {
	if (!website_selector) {
		website_selector = '#hk_biz_website';
	}
	website = $j(website_selector).val();
	if (website.substr(0,7).toLowerCase()=='http://') {
		$j(website_selector).val(website.substr(7));
	}
}

function stopPropagation(e)
{
    e = e||event; /* get IE event ( not passed ) */
    e.stopPropagation? e.stopPropagation() : e.cancelBubble = true;
}

function getCursorPosByID(text_box) {
        var txt1=document.getElementById(text_box);
		return getCursorPosByElement (txt1);
}

function log_click(page_name,selector_id,action) {
	pogoPost('/server/logClicks.php',{page_name:encodeURIComponent(page_name),selector_id:selector_id,action:action});
}

function get_target (evt) {
	return (!evt?window.event.srcElement:(evt.srcElement?$j(evt.srcElement):$j(evt.target)));
}

function pogoradio_clicked(evt) {
	if (typeof(evt)=='string') {
		var target_object = $j('#'+evt);
	} else {
		var target_object = get_target(evt);
	}
	if (target_object.hasClass('pogoradioLabel')) {
		if (target_object.prev().attr('disabled')!='disabled') {
			target_object.prev().trigger('click');
		}
	} else {
		target_object.addClass('radioSelected').parent().siblings().children().removeClass('radioSelected');
		target_object.next('SPAN').addClass('FormLabelSelected').parent().siblings().children().removeClass('FormLabelSelected');
	}
}

function getCursorPosByElement (text_element) {
		
	if (document.selection) {
		var currentRange=document.selection.createRange();   
		var workRange=currentRange.duplicate();
		text_element.select();
		var allRange=document.selection.createRange();
		var len=0;
		while(workRange.compareEndPoints("StartToStart",allRange)>0)   
		{   
		  workRange.moveStart("character",-1);
		  len++;   
		}   
		currentRange.select();
	} else {
		len = text_element.selectionStart;
	}
	return len;
}

function insertAtCursor(myField, myValue) {
//IE support
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		sel.text = myValue;
	} else if (myField.selectionStart || myField.selectionStart == '0') { //MOZILLA/NETSCAPE support
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
	} else {
		myField.value += myValue;
	}
}

function setCaretPosition(elemId, caretPos) {
    var elem = document.getElementById(elemId);

    if(elem != null) {
        if(elem.createTextRange) {
            var range = elem.createTextRange();
            range.move('character', caretPos);
            range.select();
        }
        else {
            if(elem.selectionStart) {
                elem.focus();
                elem.setSelectionRange(caretPos, caretPos);
            }
            else
                elem.focus();
        }
    }
}

function addLoadEvent(func) {
    if(typeof window.onload != 'function') {
        window.onload = func;
    }
    else {
        if(func) {
            var oldLoad = window.onload;

            window.onload = function() {
                if(oldLoad)
                        oldLoad();

                func();
            }
        }
    }
}

// The setCaretPosition function belongs right here!

function setTextAreasOnFocus() {
/***
 * This function will force the cursor to be positioned
 * at the end of all textareas when they receive focus.
 */
    var textAreas = document.getElementsByTagName('textarea');

    for(var i = 0; i < textAreas.length; i++) {
        textAreas[i].onfocus = function() {
            setCaretPosition(this.id, this.value.length);
        }
    }

    textAreas = null;
}

json_parse = (function () {

// This is a function that can parse a JSON text, producing a JavaScript
// data structure. It is a simple, recursive descent parser. It does not use
// eval or regular expressions, so it can be used as a model for implementing
// a JSON parser in other languages.

// We are defining the function inside of another function to avoid creating
// global variables.

    var at,     // The index of the current character
        ch,     // The current character
        escapee = {
            '"':  '"',
            '\\': '\\',
            '/':  '/',
            b:    '\b',
            f:    '\f',
            n:    '\n',
            r:    '\r',
            t:    '\t'
        },
        text,

        error = function (m) {

// Call error when something is wrong.

            throw {
                name:    'SyntaxError',
                message: m,
                at:      at,
                text:    text
            };
        },

        next = function (c) {

// If a c parameter is provided, verify that it matches the current character.

            if (c && c !== ch) {
                error("Expected '" + c + "' instead of '" + ch + "'");
            }

// Get the next character. When there are no more characters,
// return the empty string.

            ch = text.charAt(at);
            at += 1;
            return ch;
        },

        number = function () {

// Parse a number value.

            var number,
                string = '';

            if (ch === '-') {
                string = '-';
                next('-');
            }
            while (ch >= '0' && ch <= '9') {
                string += ch;
                next();
            }
            if (ch === '.') {
                string += '.';
                while (next() && ch >= '0' && ch <= '9') {
                    string += ch;
                }
            }
            if (ch === 'e' || ch === 'E') {
                string += ch;
                next();
                if (ch === '-' || ch === '+') {
                    string += ch;
                    next();
                }
                while (ch >= '0' && ch <= '9') {
                    string += ch;
                    next();
                }
            }
            number = +string;
            if (isNaN(number)) {
                error("Bad number");
            } else {
                return number;
            }
        },

        string = function () {

// Parse a string value.

            var hex,
                i,
                string = '',
                uffff;

// When parsing for string values, we must look for " and \ characters.

            if (ch === '"') {
                while (next()) {
                    if (ch === '"') {
                        next();
                        return string;
                    } else if (ch === '\\') {
                        next();
                        if (ch === 'u') {
                            uffff = 0;
                            for (i = 0; i < 4; i += 1) {
                                hex = parseInt(next(), 16);
                                if (!isFinite(hex)) {
                                    break;
                                }
                                uffff = uffff * 16 + hex;
                            }
                            string += String.fromCharCode(uffff);
                        } else if (typeof escapee[ch] === 'string') {
                            string += escapee[ch];
                        } else {
                            break;
                        }
                    } else {
                        string += ch;
                    }
                }
            }
            error("Bad string");
        },

        white = function () {

// Skip whitespace.

            while (ch && ch <= ' ') {
                next();
            }
        },

        word = function () {

// true, false, or null.

            switch (ch) {
            case 't':
                next('t');
                next('r');
                next('u');
                next('e');
                return true;
            case 'f':
                next('f');
                next('a');
                next('l');
                next('s');
                next('e');
                return false;
            case 'n':
                next('n');
                next('u');
                next('l');
                next('l');
                return "";
            }
            error("Unexpected '" + ch + "'");
        },

        value,  // Place holder for the value function.

        array = function () {

// Parse an array value.

            var array = [];

            if (ch === '[') {
                next('[');
                white();
                if (ch === ']') {
                    next(']');
                    return array;   // empty array
                }
                while (ch) {
                    array.push(value());
                    white();
                    if (ch === ']') {
                        next(']');
                        return array;
                    }
                    next(',');
                    white();
                }
            }
            error("Bad array");
        },

        object = function () {

// Parse an object value.

            var key,
                object = {};

            if (ch === '{') {
                next('{');
                white();
                if (ch === '}') {
                    next('}');
                    return object;   // empty object
                }
                while (ch) {
                    key = string();
                    white();
                    next(':');
                    if (Object.hasOwnProperty.call(object, key)) {
                        error('Duplicate key "' + key + '"');
                    }
                    object[key] = value();
                    white();
                    if (ch === '}') {
                        next('}');
                        return object;
                    }
                    next(',');
                    white();
                }
            }
            error("Bad object");
        };

    value = function () {

// Parse a JSON value. It could be an object, an array, a string, a number,
// or a word.

        white();
        switch (ch) {
        case '{':
            return object();
        case '[':
            return array();
        case '"':
            return string();
        case '-':
            return number();
        default:
            return ch >= '0' && ch <= '9' ? number() : word();
        }
    };

// Return the json_parse function. It will have access to all of the above
// functions and variables.

    return function (source, reviver) {
        var result;

        text = source;
        at = 0;
        ch = ' ';
        result = value();
        white();
        if (ch) {
            error("Syntax error");
        }

// If there is a reviver function, we recursively walk the new structure,
// passing each name/value pair to the reviver function for possible
// transformation, starting with a temporary root object that holds the result
// in an empty key. If there is not a reviver function, we simply return the
// result.

        return typeof reviver === 'function' ? (function walk(holder, key) {
            var k, v, value = holder[key];
            if (value && typeof value === 'object') {
                for (k in value) {
                    if (Object.hasOwnProperty.call(value, k)) {
                        v = walk(value, k);
                        if (v !== undefined) {
                            value[k] = v;
                        } else {
                            delete value[k];
                        }
                    }
                }
            }
            return reviver.call(holder, key, value);
        }({'': result}, '')) : result;
    };
}());


