var mhm_loader = {};
mhm_loader.debug = false;
mhm_loader.delay = 250;
mhm_loader.retryCounter = 10;
mhm_loader.finalizeCounter = 10;
mhm_loader.container = '#mhm_con';
mhm_loader.base_url = 'http://www.rezerviraj-hotel.com/';
mhm_loader.query_url = mhm_loader.base_url + 'HandlerReferer.ashx';
mhm_loader.ref_url = 'refererId=';
mhm_loader.lang_url = 'lcid=';
mhm_loader.ref_id = true;
mhm_loader.lang = 'en-US';
mhm_loader.types = false;
mhm_loader.server_datetime = null;

mhm_loader.lcidMapping =
{
	"ar": 1025,
	"bg": 1026,
	"bn": 1093,
	"ca": 1027,
	"de": 1031,
	"en-GB": 2057,
	"en-US": 1033,
	"es": 3082,
	"fr": 1036,
	"gu": 1095,
	"he": 1037,
	"hi": 1081,
	"hr": 1050,
	"id": 1057,
	"is": 1039,
	"it": 1040,
	"kn": 1099,
	"ja": 1041,
	"ko": 1042,
	"lt": 1063,
	"lv": 1062,
	"ml": 1100,
	"mr": 1102,
	"ms": 1086,
	"nl": 1043,
	"no": 1044,
	"pa": 1094,
	"pt": 2070,
	"pt-BR": 1046,
	"ro": 1048,
	"ru": 1049,
	"sk": 1051,
	"sl": 1060,
	"sr-Cyrl": 3098,
	"sr-Latn": 2074,
	"sv": 1053,
	"ta": 1097,
	"te": 1098,
	"th": 1054,
	"vi": 1066,
	"uk": 1058,
	"ur": 1056,
	"zh-Hans": 2052,
	"zh-Hant": 1028,
	"zh-HK": 3076,
	"zh-MO": 5124,
	"zh-SG": 4100,
	"it": 1040
}

mhm_loader.include_js = function (url, is_jQuery) {
	if (is_jQuery) {
		if(typeof jQuery != 'undefined') {
			return false;
		}
	}	
	var script = document.createElement('script');
	script.setAttribute('src',url);
	document.getElementsByTagName('head').item(0).appendChild(script);
};

mhm_loader.init = function() {
	if (mhm_loader.retryCounter > 0) {
		if (typeof jQuery != 'undefined') {
			mhm_loader.set_parameters();

			if (mhm_loader.ref_id) {
				var url = mhm_loader.query_url + '?' + mhm_loader.ref_url + mhm_loader.ref_id + '&' + mhm_loader.lang_url + mhm_loader.lcidMapping[mhm_loader.lang] + '&format=json&jsoncallback=?';
				jQuery.getJSON(url, mhm_loader.build_booker);
			} else {
				mhm_loader.echo('container doesn\'t exist');
			}
		} else {
			mhm_loader.retryCounter--;
			setTimeout('mhm_loader.init()', mhm_loader.delay);
		}
	} else {
		mhm_loader.echo('failed to load');
	}
};



mhm_loader.build_booker = function(data) {
	mhm_loader.types = data.types;
	mhm_loader.server_datetime = eval('new' + data.serverDateTime.replace(/\//g, ' '));
	jQuery('#mhm_con').html(mhm_loader.html_entity_decode(data.template));
	jQuery('.numeric').bind('keypress', function(e) { return !(e.which != 8 && e.which != 0 && (e.which < 48 || e.which > 57)); })
	jQuery('#mhm_con').click(function(event) {
		var target = jQuery(event.target);
		if (target.is('a.mhm_tab')) {
			target.parent().siblings().removeClass('sel');
			target.parent().addClass('sel');
			mhm_loader.prepare_properties(target.attr('id').split('_')[2]);
			return false;
		} else if (target.is('#mhm_submit')) {
			var location = mhm_loader.build_submit_string();
			if (location) {
				window.open(location);
			}
			return false;
		}
	});

	mhm_loader.finalize();
};

mhm_loader.prepare_properties = function(id) {
	var selectContainer = jQuery('#mhm_properties');
	selectContainer.empty();
	for (type in mhm_loader.types) {
		var type_id = mhm_loader.types[type]['TypeId'];
		if (type_id == id) {
			mhm_loader.build_properties(selectContainer, mhm_loader.types[type]['Estates']);
		}
	}
};


mhm_loader.build_properties = function(selectContainer, estates) {
	var options = '';
	for (estate in estates) {
		options += '<option value="' + estates[estate]['EstateId'] + '">' + estates[estate]['EstateName'] + '</option>';
	}
	selectContainer.html(options);
};

mhm_loader.set_parameters = function() {
	var ref_id = (jQuery(mhm_loader.container).attr('title'));
	mhm_loader.lang = (jQuery(mhm_loader.container).attr('lang'));
	if (isNaN(ref_id) == false) {
		mhm_loader.ref_id = ref_id;
	}
};

mhm_loader.finalize = function() {
	if (mhm_loader.finalizeCounter > 0) {
		var mhm_arrival = jQuery('#mhm_arrival');
		if (mhm_arrival.is('input')) {
			mhm_loader.prepare_properties(mhm_loader.types[0]['TypeId']);
			mhm_loader.loadLocaleScripts(mhm_loader.lang, function() {
				jQuery.datepicker.setDefaults({
					minDate: mhm_loader.server_datetime,
					showMonthAfterYear: false
				}, jQuery.datepicker.regional['']);
				mhm_arrival.datepicker(jQuery.datepicker.regional[mhm_loader.lang]);
				mhm_arrival.bind('keypress', function(e) { return false; })
			});
		} else {
			mhm_loader.finalizeCounter--;
			setTimeout('mhm_loader.finalize()', mhm_loader.delay);
		}
	}
};

mhm_loader.build_submit_string = function () {
	var errors = new Array();
	jQuery('#mhm_con .error').removeClass('error');
	
	var submit_string = mhm_loader.base_url + '?';
	
	if (mhm_loader.ref_id) {
		submit_string += mhm_loader.ref_url + mhm_loader.ref_id;
	} else {
		return false;
	}	
	if (mhm_loader.lang) {
		submit_string += '&' + mhm_loader.lang_url + mhm_loader.lcidMapping[mhm_loader.lang];
	}
	if (jQuery('#mhm_properties').attr('value')) {
		submit_string += '&estateId=' + jQuery('#mhm_properties').attr('value');
	} else {
		errors.push('mhm_properties');
	}
	if (jQuery('#mhm_arrival').attr('value')) {
		submit_string += '&arrival=' + jQuery.datepicker.formatDate(jQuery.datepicker.W3C, jQuery('#mhm_arrival').datepicker("getDate"));
	} else {
		errors.push('mhm_arrival');
	}
	var nights = jQuery('#mhm_nights').attr('value');
	if (nights) {
		if (isNaN(nights) == false) {
			submit_string += '&nights=' + nights;	
		} else {
			errors.push('mhm_nights');
		}
	} else {
		errors.push('mhm_nights');
	}
	
	var adults = jQuery('#mhm_adults').attr('value');
	var teens = jQuery('#mhm_teens').attr('value');
	var children = jQuery('#mhm_children').attr('value');
	
	if (adults || teens || children) {
		if (adults) {
			if (isNaN(adults) == false) {
				submit_string += '&adults=' + adults;	
			} else {
				errors.push('mhm_adults');
			}
		}
		
		if (teens) {
			if (isNaN(teens) == false) {
				submit_string += '&teens=' + teens;	
			} else {
				errors.push('mhm_teens');
			}
		}
		
		if (children) {
			if (isNaN(children) == false) {
				submit_string += '&children=' + children;	
			} else {
				errors.push('mhm_children');
			}
		}
	} else {
		errors.push('mhm_adults');
	}
	
	var errors_l = errors.length;
	if (errors_l > 0) {
		for (var i=0; i<errors_l; i++ ){
			jQuery('#'+errors[i]).parent().addClass('error');
			
		}
		
		return false;
	} else {
		return submit_string;
	}
};

/**
 * Notification function that gives us ability to control
 * alerts via "mhm_loader.debug = true/false"
 * which is set per page
 * 
 * Default is false
 */
mhm_loader.echo = function (string) {
	if (mhm_loader.debug == true) {
		alert(string);
	}
	return false;
};

mhm_loader.html_entity_decode = function (str) {
    var ta = document.createElement('textarea');
    ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
    var decoded = ta.value;
    ta = null;
    return decoded;
};


mhm_loader.loadLocaleScripts = function(localeName, onLoadComplete) {
	var localeScriptPath = mhm_loader.base_url + '_js/ui.datepicker-' + localeName + '.min.js';
	jQuery.ajaxSetup({ cache: false });
	jQuery.getScript(localeScriptPath, function() { jQuery.ajaxSetup({ cache: false }); if (onLoadComplete != undefined) onLoadComplete(); });
}

// inject 
mhm_loader.include_js (mhm_loader.base_url + '_js/jquery-1.3.2.min.js',true);
mhm_loader.include_js(mhm_loader.base_url + '_js/jquery-ui-1.7.1.custom.min.js');

// initialize loader after script injection
mhm_loader.init();
