YAHOO.namespace("results");

YAHOO.results.offers = new Array();
YAHOO.results.mapPanel = null;

YAHOO.results.notAllExpanded = true;

YAHOO.results.offerPage = null;

YAHOO.results.roomOffers= null;

YAHOO.results.initMap = function() {
	YAHOO.results.mapPanel.on("expand", function(cmp) {
		YAHOO.results.markAsMaximized("map_maximized");
	});
	YAHOO.results.mapPanel.on("collapse", function(cmp) {
		YAHOO.results.markAsMinimized("map_maximized");
	});
	
	if(YAHOO.results.getCookie("map_maximized") == "true") {
		YAHOO.results.mapPanel.expand();
	} else {
		YAHOO.results.mapPanel.collapse();
	}
}


YAHOO.results.registerOffer = function(offerId) {
	YAHOO.results.offers.push(offerId);
}

YAHOO.results.restorePageState = function() {
	for (i = 0; i < YAHOO.results.offers.length; i++) {
		if (YAHOO.results.getCookie(YAHOO.results.offers[i]) == "true") {
			YAHOO.results.maximizeOnUI(YAHOO.results.offers[i]);
		} else {
			YAHOO.results.minimizeOnUI(YAHOO.results.offers[i]);
		}
	}
}

YAHOO.results.minimizeAll = function() {
	for (i = 0; i < YAHOO.results.offers.length; i++) {
		YAHOO.results.minimize(YAHOO.results.offers[i]);
	}
	YAHOO.results.notAllExpanded = true;
	YAHOO.results.changeLink();
}

YAHOO.results.maximizeAll = function() {
	for (i = 0; i < YAHOO.results.offers.length; i++) {
		YAHOO.results.maximize(YAHOO.results.offers[i]);
	}
	YAHOO.results.notAllExpanded = false;
	YAHOO.results.changeLink();
}

YAHOO.results.checkNotAllExpanded = function() {
	var notAllExpanded = false;
	$$('.priceTable').each(function(elem){
		if (elem.style.display == 'none') {
			notAllExpanded = true;
			YAHOO.results.notAllExpanded = true;
			YAHOO.results.changeLink();
			throw $break;
		}
	});
	if (!notAllExpanded) {
		YAHOO.results.notAllExpanded = false;
		YAHOO.results.changeLink();
	}
}

YAHOO.results.changeLink = function(){
	if (YAHOO.results.notAllExpanded) {
		$$('.maxLink').each(function(item) {
			item.style.display = "block";
		});
		$$('.minLink').each(function(item){
			item.style.display = "none";
		});
	} else {
		$$('.minLink').each(function(item) {
			item.style.display = "block";
		});
		$$('.maxLink').each(function(item){
			item.style.display = "none";
		});
	}
}

YAHOO.results.minimize = function(uniqueId) {
	YAHOO.results.markAsMinimized(uniqueId);
	YAHOO.results.minimizeOnUI(uniqueId);
	YAHOO.results.checkNotAllExpanded();
}

YAHOO.results.maximize = function(uniqueId) {
	YAHOO.results.markAsMaximized(uniqueId);
	YAHOO.results.maximizeOnUI(uniqueId);
	YAHOO.results.checkNotAllExpanded();
}

YAHOO.results.maximizeOnUI = function(uniqueId) {
	document.getElementById("priceTable_" + uniqueId).style.display = "block";
	document.getElementById("maximizeBox_" + uniqueId).style.display = "none";
	document.getElementById("minimizeBox_" + uniqueId).style.display = "block";
}

jQuery(document).ready(function(){
	jQuery(".max-min").click(function(event){
		event.stopImmediatePropagation();
		table = jQuery(this).parents("div:eq(0)").next();
	    jQuery(table).toggle();
	    href = jQuery("a",jQuery(this));
	    jQuery(href).text(jQuery(href).attr(jQuery(table).is(":visible")?"closeText":"openText"));
	   
	});
	
	jQuery(".max-min-all").click(function(event){
		control = jQuery(this);
		event.stopImmediatePropagation();
		jQuery(".priceTable:"+(control.attr("marker")=="true"?"visible":"hidden")).each(function(){
				jQuery(".max-min",jQuery(this).prev()).click();
		});
		jQuery("."+control.attr("class")).attr("marker",control.attr("marker")=="true"?false:true);
		jQuery("."+control.attr("class")).text(control.attr("marker")=="true"
			                               ?control.attr("closeText"):control.attr("openText"));
	});
 }
)

YAHOO.results.minimizeOnUI = function(uniqueId) {
	//document.getElementById("priceTable_" + uniqueId).style.display = "none";
	//document.getElementById("minimizeBox_" + uniqueId).style.display = "none";
	//document.getElementById("maximizeBox_" + uniqueId).style.display = "block";
}

YAHOO.results.markAsMaximized = function(uniqueId) {
	YAHOO.results.setCookie(uniqueId, true);
}

YAHOO.results.markAsMinimized = function(uniqueId) {
	YAHOO.results.setCookie(uniqueId, false);
}

YAHOO.results.setCookie = function(name, value) {
	document.cookie = "offer_" + name + "=" + value;
}

YAHOO.results.getCookie = function(name) {
	if (document.cookie.length > 0) {
		name = "offer_" + name;
		start = document.cookie.indexOf(name + "=");
		if (start != -1) {
			start = document.cookie.indexOf("=", start) + 1;
			end = document.cookie.indexOf(";", start);
			if (end == -1) {
				end = document.cookie.length;
			}
			return unescape(document.cookie.substring(start, end));
		}
	}
	return "";
}

YAHOO.results.clearAllCookies = function() {
	hasMoreOffers = true;
	start = 0;
	end = 0;
	while (hasMoreOffers) {
		start = document.cookie.indexOf("offer_");
		if (start != -1) {
			end = document.cookie.indexOf("=", start);
			if (end != -1) {
				name = unescape(document.cookie.substring(start, end));
				YAHOO.results.clearCookie(name);
			}
		} else {
			hasMoreOffers = false;
		}
	}
	YAHOO.results.clearCookie("map_maximized");
}

YAHOO.results.clearCookie = function(name) {
	date = new Date();
	date.setTime(date.getTime() - 1);
	document.cookie = name + "=; expires=" + date.toGMTString();
}

YAHOO.results.send = function(hotelId) {
	YAHOO.results.mapPanel.expand();
	YAHOO.results.xss.send("mapFrame", hotelId);
}

Event.observe(document, "xss:message", function(e) {
	var params = e.memo.msg.split("|");
	var hotelCode = params[0];
	var cityCode = params[1];
	var supplierCode = params[2];
	YAHOO.results.showHotelPopup(hotelCode, cityCode, supplierCode);
});


YAHOO.results.showHotelPopup = function(offerUniqueId) {
	url = parent.location.protocol
			+ "//"
			+ parent.location.host
			+ parent.location.pathname
			+ parent.location.search
			+ "&_eventId=showOffers&offerUniqueId="
			+ offerUniqueId;
	YAHOO.results.openPopup('modalPanel', url);
}

YAHOO.results.openPopup = function(frameId, url) {
	innerFrameId = frameId + "_frame";
	
	var frame = document.getElementById(innerFrameId);
	if (frame == null) {
		frame = document.createElement("iframe");
		frame.id = innerFrameId;
		frame.name = innerFrameId;
		frame.frameBorder = 0;
		var content = "#" + frameId + " .x-window-body";
		jQuery("#"+$$(content)[0].id).append(frame);
	}
    frame.src = url;
}

YAHOO.results.closePopup = function(frameId) {
	var cmp = Ext.getCmp(frameId);
	try{
	   cmp.hide();
	}catch (e) {
		//trying to find in parent
		cmp = parent.Ext.getCmp(frameId);
		cmp.hide();
	}
}

YAHOO.results.initCheckAllCheckBox = function(filterIndex, checked, label) {
    Ext.onReady(function(){
        var checkAllCmp = new Ext.form.Checkbox({
			id: "filter_all_check_" + filterIndex + "_cmp",
			checked: checked,
			boxLabel: label,
			renderTo: "filter_all_check_" + filterIndex
        });
		checkAllCmp.on("check", function(cmp, checked) {
			Ext.each(Ext.query('#filter_' + filterIndex + '_checkbox_cnt input[type="checkbox"]'), function(chBox) {
				var currCmp = Ext.getCmp(chBox.id);
				currCmp.suspendEvents(false);
				currCmp.setValue(checked);
				currCmp.resumeEvents();
			});
		});
    });
}

YAHOO.results.initOtherCheckBoxes = function(filterIndex) {
	Ext.onReady(function(){
		Ext.each(Ext.query('#filter_' + filterIndex + '_checkbox_cnt input[type="checkbox"]'), function(chBox) {
			Ext.getCmp(chBox.id).on("check", function(cmp) {
				var checked = true;
				Ext.each(Ext.query('#filter_' + filterIndex + '_checkbox_cnt input[type="checkbox"]'), function(chBox2) {
					if (!Ext.getCmp(chBox2.id).getValue()) {
						checked = false;
					}
				});
				var checkAllCmp = Ext.getCmp("filter_all_check_" + filterIndex + "_cmp");
				checkAllCmp.suspendEvents(false);
				checkAllCmp.setValue(checked);
				checkAllCmp.resumeEvents();
			});
		});
	});
}

YAHOO.results.addBorder = function(cnt) {
	if (cnt.clientHeight != cnt.scrollHeight || cnt.clientWidth != cnt.scrollWidth) {
		cnt.className += " big-checkbox-list";
	}
}

YAHOO.results.changeRoomOffer = function(offerItem, roomIndex, currentOfferIndex, convertedPrice) {
	YAHOO.results.roomOffers[offerItem][roomIndex] = {
		"offerPage": YAHOO.results.offerPage,
		"offerItem": offerItem,
		"roomIndex": roomIndex,
		"currentOfferIndex": currentOfferIndex,
		"price": convertedPrice
	}
	var fullPrice = 0;
	for (var i = 0; i < YAHOO.results.roomOffers[offerItem].length; i++) {
		var room = YAHOO.results.roomOffers[offerItem][i];
		if (room != undefined) {
			fullPrice += room.price;
		}
	}
	var priceCmp = $('fullPrice_' + offerItem);
	$('fullPrice_' + offerItem).innerHTML = fullPrice.toFixed(2);
}

YAHOO.results.setOfferPage = function(offerPage) {
	YAHOO.results.offerPage = offerPage;
}

YAHOO.results.sendMultiRoomParameters = function(frameId, url, offerPage, offerItem) {
	var json = "[";
	for (var i = 0; i < YAHOO.results.roomOffers[offerItem].length; i++) {
		var room = YAHOO.results.roomOffers[offerItem][i];
		if (room != undefined) {
			json += room.currentOfferIndex + ",";
		}
	}
	// especially for IE
	json = json.substring(0, json.length - 1);
	json += "]";
	
	YAHOO.results.openPopup(frameId, url + '&multiRoomJSON=' + json)
}
