/*
	$Id: handset.js 11440 2009-03-03 05:13:22Z mark $
*/

function updateHandsetUnitDetails(pageURL)
{	
	var callbackArgs = new Array();
	callbackArgs['pageURL'] = pageURL;

	var ajax = new AJAX(showUpdateHandsetUnitDetails, callbackArgs);
	ajax.setResponseFormat("JSON");

	var url = getBaseURL() + pageURL + "get-product-details/";
	ajax.request(url);
	return false;
}


function showUpdateHandsetUnitDetails(args)
{
	var details = JSON.parse(args['response'], null);
	if(details)
	{
		var productDetails = document.getElementById("handsetDetails");
		var specificationsTab = document.getElementById("specificationsTab");
		var plansTab = document.getElementById("plansTab");
		var bonusesTab = document.getElementById("bonusesTab");
		var accessoriesTab = document.getElementById("accessoriesTab");

		var yourChoicesTab = document.getElementById("yourChoices");

		if(productDetails)
		{
			productDetails.innerHTML = details.summary;
		}
		if(specificationsTab)
		{
			specificationsTab.innerHTML = details.specifications;
		}
		if(plansTab)
		{
			plansTab.innerHTML = details.plans;
		}
		if(bonusesTab)
		{
			bonusesTab.innerHTML = details.bonuses;
		}
		if(accessoriesTab)
		{
			accessoriesTab.innerHTML = details.accessories;
		}
		if(yourChoicesTab)
		{
			yourChoicesTab.innerHTML = details.yourChoices;
		}
	}

	replacePageTitles();
}


function showTab(pageURL, index)
{
	if(index == "bonuses")
	{
		var sjax = new SJAX();
		sjax.setResponseFormat("JSON");
		var url = getBaseURL() + pageURL + "tab-available/bonuses/";
		var response = sjax.request(url);
		if(response) 
		{
			displayMessage("detailsMessage", "tabs", response);
			return false;
		}
	}

	showGenericTab(pageURL, 'tabs', index);

	resizeBody("handsetBody", getComputedHeight("handsetDetails"));
	return false;
}


function showGenericTab(pageURL, parentID, index)
{
	var headerLink = document.getElementById(index + "Header");
	if(headerLink)
	{
		var header = headerLink.parentNode;
		if(header)
		{
			if(header.className.indexOf("activeTabHeader") == -1)
			{
				header.className += " activeTabHeader";
			}
		}
	}

	var tab = document.getElementById(index + "Tab");	
	if(tab)
	{
		if(tab.className.indexOf("activeTab") == -1)
		{
			tab.className += " activeTab";
		}
	}

	var parentNode = document.getElementById(parentID);
	for(var i = 0; i < parentNode.childNodes.length; i++)
	{
		if(parentNode.childNodes[i].className && (parentNode.childNodes[i].className.indexOf('tab') > -1))
		{
			var newIndex = parentNode.childNodes[i].id.substr(0, parentNode.childNodes[i].id.length-3);

			if(newIndex != index)
			{
				hideTab(newIndex);
			}
		}
	}	

	return false;
}


function hideTab(index)
{
	var headerLink = document.getElementById(index + "Header");
	var tab = document.getElementById(index + "Tab");

	if(headerLink)
	{
		var header = headerLink.parentNode;
		if(header)
		{
			header.className = "";
		}
	}

	if(tab)
	{
		tab.className = tab.className.replace(" activeTab", "");
		tab.className = tab.className.replace("activeTab", "");
	}
}


function selectHandsetPlanCombo(pageURL, handsetPlanComboID)
{
	var url = getBaseURL() + pageURL + "select-handset-plan-combo/" + handsetPlanComboID + "/";

	var args = Array();
	args['pageURL'] = pageURL;
	var ajax = new AJAX(showSelectHandsetPlanCombo, args);
	ajax.setResponseFormat("JSON");
	ajax.request(url);

	return false;
}


function showSelectHandsetPlanCombo(args)
{
	var response = JSON.parse(args['response']);
	if(response)
	{
		if((response['action'] == "selectHandsetPlanCombo") || (response['action'] == "deselectHandsetPlanCombo"))
		{	
			showYourChoices(response);
			showBonusesAndExtras(response);

			clearHandsetPlanCombos();

			var selectedHandsetPlanCombo = document.getElementById("selectedHandsetPlanCombo");
			if(selectedHandsetPlanCombo && response['selectedHandsetPlanCombo'])
			{
				selectedHandsetPlanCombo.innerHTML = response['selectedHandsetPlanCombo'];
			} 

			var selectedRow = document.getElementById("handsetPlanCombos_" + response['handsetPlanComboID']);

			if(selectedRow)
			{
				if(response['action'] == "selectHandsetPlanCombo")
				{
					if(selectedRow.className.indexOf("active") < 0)
					{
						selectedRow.className += " active";
					}
				}
				else
				{
					selectedRow.className = selectedRow.className.replace(" active", "");
					selectedRow.className = selectedRow.className.replace("active", "");
				}
			}

			clearOutright();
			clearPrepaid();
		}
	}
}


function selectPrepaid(pageURL, planID)
{
	var url = getBaseURL() + pageURL + "select-prepaid/" + planID + "/";

	var args = Array();
	args['pageURL'] = pageURL;

	var ajax = new AJAX(showSelectPrepaid, args);
	ajax.setResponseFormat("JSON");
	ajax.request(url);
	return false;
}


function showSelectPrepaid(args)
{
	var response = JSON.parse(args['response']);
	if(response)
	{
		showYourChoices(response);
		showBonusesAndExtras(response);

		var selectedRow = document.getElementById("prepaid_" + response['planID']);
		if(selectedRow)
		{
			clearPrepaid();
			if(response['action'] == "selectPrepaid")
			{
				if(selectedRow.className.indexOf("active") < 0)
				{
					selectedRow.className += " active";
				}
			}
			else
			{
				selectedRow.className = selectedRow.className.replace(" active", "");
				selectedRow.className = selectedRow.className.replace("active", "");
			}
		}

		var moreDetailsLink = document.getElementById("prepaidMoreDetailsLink");
		if(moreDetailsLink)
		{
			moreDetailsLink.href = moreDetailsLink.href.replace(
					/\/[^\/]+\/view-terms-and-conditions/gi,
					"/" + response['planCategoryURL'] + "/view-terms-and-conditions");
		}

		clearOutright();
		clearHandsetPlanCombos();
	}
}


function selectOutright(pageURL)
{
	var url = getBaseURL() + pageURL + "select-outright/";

	var args = Array();
	args['pageURL'] = pageURL;

	var ajax = new AJAX(showSelectOutright, args);
	ajax.setResponseFormat("JSON");
	ajax.request(url);
	return false;
}


function showSelectOutright(args)
{
	var response = JSON.parse(args['response']);
	if(response)
	{
		showYourChoices(response);
		showBonusesAndExtras(response);

		if(response['action'] == "selectOutright")
		{
			var outright = document.getElementById("outright");
			if(outright)
			{
				if(outright.className.indexOf("outrightActive") < 0)
				{
					outright.className += " outrightActive";
				}
			}
		}
		else
		{
			var outright = document.getElementById("outright");
			if(outright)
			{
				outright.className = outright.className.replace(" outrightActive", "");
				outright.className = outright.className.replace("outrightActive", "");
			}
		}

		clearPrepaid();
		clearHandsetPlanCombos();
	}
}


function showYourChoices(response)
{
	if(response['yourChoices'])
	{
		$('#yourChoices').html(response['yourChoices']);
	}
}


function showBonusesAndExtras(response)
{
	if(response['bonuses'])
	{
		$('#bonusesTab').html(response['bonuses']);
	}
}

function clearHandsetPlanCombos()
{
	var selectedHandsetPlanCombo = document.getElementById("selectedHandsetPlanCombo");

	if(selectedHandsetPlanCombo)
	{
		selectedHandsetPlanCombo.innerHTML = "";
	}
	clearPlans("planSelection");
}


function clearPrepaid()
{
	clearPlans("prepaidPlanSelection");
}

function clearPlans(type)
{
	var plans = document.getElementsByTagName("TR");
	if(plans)
	{
		for(var i = 0; i < plans.length; i++)
		{
			if(plans[i].className.indexOf(type) == 0)
			{
				plans[i].className = plans[i].className.replace(" active", "");
				plans[i].className = plans[i].className.replace("active", "");
			}
		}
	}
}


function clearOutright()
{
	var outright = document.getElementById("outright");
	if(outright)
	{
		outright.className = outright.className.replace(" outrightActive", "");
		outright.className = outright.className.replace("outrightActive", "");
	}
}


function selectBonus(pageURL, bonusID)
{
	var url = getBaseURL() + pageURL + "select-bonus-option/" + bonusID + "/";
	var ajax = new AJAX(showSelectBonus);
	ajax.setResponseFormat("JSON");
	ajax.request(url);
}


function showSelectBonus(args)
{
	var response = JSON.parse(args['response']);
	if(response)
	{
		if((response['action'] == "selectBonus") || (response['action'] == "deselectBonus"))
		{
			var yourChoices = document.getElementById("yourChoices");
			if(yourChoices && response['yourChoices'])
			{
				yourChoices.innerHTML = response['yourChoices'];
			}
		}
	}
}


function selectFreebie(pageURL, freebieID)
{
	var url = getBaseURL() + pageURL + "select-freebie/" + freebieID + "/";
	var ajax = new AJAX(showSelectFreebie);
	ajax.setResponseFormat("JSON");
	ajax.request(url);
}


function showSelectFreebie(args)
{
	var response = JSON.parse(args['response']);
	if(response)
	{
		if((response['action'] == "selectFreebie") || (response['action'] == "deselectFreebie"))
		{
			showYourChoices(response);
		}
	}
}


function validatePromotion(pageURL)
{
	var url = getBaseURL() + pageURL;
	var ajax = new AJAX(showValidatePromotion);
	ajax.setMethod("POST");
	ajax.setResponseFormat("XHTML");

	var promotionalCode = document.getElementById("promotionalCodeValue");
	if(promotionalCode)
	{
		ajax.setPayload("promotionalCode=" + promotionalCode.value);
		ajax.request(url);
	}

	return false;
}


function showValidatePromotion(args)
{
	var promotionalCode = document.getElementById("promotionalCodeValue");
	var promotionalCodeResult = document.getElementById("promotionalCodeResult");

	if(!promotionalCodeResult)
	{
		var fieldset = promotionalCode.parentNode;
		if(fieldset)
		{
			promotionalCodeResult = document.createElement("DIV");
			promotionalCodeResult.id = "promotionalCodeResult";
			fieldset.appendChild(promotionalCodeResult);
		}
	}
	if(promotionalCodeResult)
	{
		promotionalCodeResult.innerHTML = args['response'];
	}
}


function addAccessory(callingURL, accessoryURL, id, isUpdate)
{
	var url = getBaseURL() + accessoryURL + "/add-item-to-shopping-trolley/";
	var ajax = new AJAX(showUpdateAccessory);
	ajax.setResponseFormat("JSON");
	ajax.setMethod("POST");

	var callbackArgs = new Array();

	callbackArgs['callingURL'] = callingURL;
	callbackArgs['accessoryURL'] = accessoryURL;
	callbackArgs['id'] = id;
	if(isUpdate)
	{
		callbackArgs['notificationAction'] = 'update';
	}
	else
	{
		callbackArgs['notificationAction'] = 'add';
	}

	ajax.setCallbackArgs(callbackArgs);

	var quantity = document.getElementById("quantity_" + id);
	var quantityValue = 1;
	if(quantity)
	{
		quantityValue = quantity.value;
	}

	ajax.setPayload("trolley=handset&ajax=true&quantity=" + quantityValue + "&overwriteQuantity=true");
	ajax.setResponseFormat("JSON");
	ajax.request(url);	
	
	return false;
}


function updateAccessory(callingURL, accessoryURL, id)
{
	addAccessory(callingURL, accessoryURL, id, true);
}


function removeAccessory(callingURL, accessoryURL, pageURL, index, id)
{
	var url = getBaseURL() + pageURL + "/remove-item-from-trolley/";
	var ajax = new AJAX(showUpdateAccessory);

	ajax.setResponseFormat("JSON");

	var callbackArgs = new Array();

	callbackArgs['accessoryURL'] = accessoryURL;
	callbackArgs['callingURL'] = callingURL;
	callbackArgs['index'] = index;
	callbackArgs['id'] = id;
	callbackArgs['notificationAction'] = 'remove';
	ajax.setCallbackArgs(callbackArgs);
	ajax.request(url + index + "/?trolley=handset&ajax=true");

	return false;
}


function showUpdateAccessory(args)
{
	var response = JSON.parse(args['response']);
	if(response)
	{
		if(response['success'] == true)
		{
			var url = getBaseURL() + args['accessoryURL'] + "/get-product-details/accessory/" +  Base64Utils.prototype.encode(args['callingURL']);
			var sjax = new SJAX()
			sjax.setResponseFormat("JSON");

			var response = sjax.request(url);
			response = JSON.parse(response);

			if(response)
			{
				if(response['summary'])
				{
					$('#accessoryDetails').html(response['summary']);
				}
			}

			var url = getBaseURL() + args['callingURL'] + "/your-choices/JSON/";
			var sjax = new SJAX()
			sjax.setResponseFormat("JSON");

			var response = sjax.request(url);
			response = JSON.parse(response);

			if(response)
			{
				showYourChoices(response);
			}	
			
			var element = document.getElementById('actionNotification_' + args['id']);
			if(element)
			{
				if(args['notificationAction'] == 'add')
				{
					element.innerHTML = 'This item has been added to your choices';
				}
				else if(args['notificationAction'] == 'update')
				{
					element.innerHTML = 'This item has been updated in your choices';
				}
				else if(args['notificationAction'] == 'remove')
				{
					element.innerHTML = 'This item has been removed from your choices';
				}
			}
		} // response == true
	}
}


function addHandsetToCart(pageURL)
{
	var url = getBaseURL() + pageURL + "validate-add-handset/";
	var sjax = new SJAX();
	sjax.setResponseFormat("JSON");

	var response = sjax.request(url);

	if(response) 
	{
		displayMessage("detailsMessage", "tabs", response);
		return false;
	}
	else
	{
		return true;
	}
}


function displayAccessory(id, parentID, pageURL, callingPageURL)
{
	var url = getBaseURL() + pageURL + "get-product-details/accessory/" + Base64Utils.prototype.encode(callingPageURL);
	var sjax = new SJAX();
	sjax.setResponseFormat("JSON");

	var response = sjax.request(url);

	var summary = null;

	response = JSON.parse(response);

	if(!response['summary'])
	{
		return false;
	}

	showLightboxOverlay("handsetLightboxOverlay");

	var accessory = document.getElementById(id);

	if(!accessory)
	{
		accessory = document.createElement("DIV");
		accessory.id = id;
	}	

	var parentElement = document.getElementById(parentID);

	if(parentElement) 
	{
		document.body.appendChild(accessory);
	}

	var linkString = '<a id="accessoryClose" href="#" onclick="return hideAccessory(this);"><img src="' + getBaseURL() + 'core/images/public/products/close-button.gif" height="22px" width="51px" alt="close" /></a>';
	accessory.innerHTML = response['summary'] + linkString;
	accessory.style.display = "block";
	
	return false;
}


function hideAccessory(link)
{
	if(link && link.parentNode)
	{
		link.parentNode.style.display = "none";
		hideLightboxOverlay("handsetLightboxOverlay");
	}
	return false;
}


function togglePlanCategory(id)
{
	if($('#planCategory_' + id).attr('class').indexOf("hiddenPlanCategory") > -1)
	{
		$('#planCategory_' + id).removeClass("hiddenPlanCategory");
		var elementParent = $('#planCategory_' + id);

		var element = $('#planCategoryContents_' + id);
		if(element)
		{
			element.slideDown();
		}
		$('#planCategoryContents_' + id).removeClass('hiddenContents');
	}
	else
	{
		var element = $('#planCategoryContents_' + id);
		if(element)
		{
			if(element.attr('class').indexOf("hiddenContents") == -1)
			{
				$('#planCategory_' + id).addClass('planSwitchClosed');
				element.slideUp();
			}
			else
			{
				$('#planCategory_' + id).removeClass('planSwitchClosed');
				element.slideDown();
			}
			element.toggleClass('hiddenContents');
		}
	}

	/* solution for IE bug on plans page,
	 * footer was not moving with toggling prepaid/outright options
	 */
	var browserName=navigator.appName;
	if (browserName=="Microsoft Internet Explorer")
	{
		var element = document.getElementById("footer");
		if(element) 
		{
			element.style.visibility = "hidden";
			element.style.visibility = "visible";
		}
	}

	return false;
}


function displayFeaturePopup(id, pageURL, iteration)
{
	var element = document.getElementById("feature_" + id);

	var popupElement = document.getElementById("feature_popup_" + id);
	if(popupElement)
	{
		popupElement.style.visibility = "visible";
	}
	else 
	{	
		var url = getBaseURL() + pageURL + "get-feature-details/" + id + "/";
		var sjax = new SJAX();

		sjax.setResponseFormat("XHTML");
		var response = sjax.request(url);
		if(!response)
		{
			return false;
		}

		popupElement = document.createElement("div");
		popupElement.id = "feature_popup_" + id;
		popupElement.innerHTML = response;
		popupElement.style.visibility = "visible";
		popupElement.style.position = "absolute";
		popupElement.style.padding = "0px";
		popupElement.style.width = "265px";
		
		var browserName=navigator.appName;
		if (browserName=="Microsoft Internet Explorer")
		{
			popupElement.style.left = "0px";
			if(iteration > 1)
			{
				popupElement.style.marginLeft = "440px";
			}
			else
			{
				popupElement.style.marginLeft = "80px";
			}
			popupElement.style.marginTop = "-20px";
		}
		else
		{
			if(iteration > 1)
			{
				popupElement.style.marginLeft = "80px";
			}
			else
			{
				popupElement.style.marginLeft = "65px";
			}
			popupElement.style.marginTop = "-40px";
		}

		element.appendChild(popupElement);
	}
}


function hideFeaturePopup(id)
{
	document.getElementById("feature_popup_" + id).style.visibility = "hidden";
}


function displayFreebie(pageURL, link, freebieID)
{
	var overlay = createFreebieOverlay(link.id);
	var callbackArgs  = new Array();
	callbackArgs['parentID'] = link.id;

	var ajax = new AJAX(displayFreebieCallback, callbackArgs);
	var url = getBaseURL() + pageURL + "/get-freebie-details/" + freebieID + "/";
	ajax.setResponseFormat("XHTML");
	ajax.request(url);
	return false;
}
	


function displayFreebieCallback(args)
{
	var response = args['response'].replace(/^\s+|\s+$/g, '');
	if(response && (response != ""))
	{
		var overlay = createFreebieOverlay(args['parentID']);
		$('#' + overlay.id).html(response);
		$('#freebieOverlay').removeClass('freebieOverlayHidden');
	}
}


function createFreebieOverlay(parentID)
{
	var overlay = document.getElementById('freebieOverlay');
	var overlayInner = document.getElementById('freebieOverlayInner');
	if(!overlayInner)
	{
		overlay = document.createElement("DIV");
		overlay.id = "freebieOverlay";
		var overlayInner = document.createElement("DIV");
		overlayInner.id = "freebieOverlayInner";
		overlay.appendChild(overlayInner);
	}

	parentNode = document.getElementById(parentID);
	if(parentNode)
	{
		parentNode.appendChild(overlay);
	}

	overlay.className = 'freebieOverlayHidden';
	return overlayInner;
}


function hideFreebie()
{
	var overlay = document.getElementById('freebieOverlay');
	if(overlay)
	{
		overlay.parentNode.removeChild(overlay);
	}
}


function selectContractLength(pageURL, contractLength)
{
	var callbackArgs = new Array();
	var ajax = new AJAX(showSelectContractLength, callbackArgs);

	var url = getBaseURL() + pageURL + "/select-contract-length/" + contractLength + "/";
	ajax.setResponseFormat("JSON");
	ajax.request(url);
	return false;
}


function showSelectContractLength(args)
{
	var response = JSON.parse(args['response']);

	$('#plansTab').html(response['plans']);
	$('#yourChoices').html(response['yourChoices']);
}
