/** this constant block must be same as data on database **/
var SOFTWARE_TYPE = new Array();
SOFTWARE_TYPE["FULL"]=0;
SOFTWARE_TYPE["UPGRADE"]=1;

var DELIVERY_METHOD = new Array();
DELIVERY_METHOD["PHYSICAL"]=0;
DELIVERY_METHOD["DOWNLOAD"]=1;
DELIVERY_METHOD["ELD"]=2;
/** end of constant block **/
  
function closeUGPopup(id, div){
	if ( document.getElementById("serialNumber") != null ){
		document.getElementById("serialNumber").value = "";
	}
	document.getElementById("upgradeValidationError").style.display = "none";
	closePopup(id, div);
	if (isSingleDeliveryMethod()) {
		selectBox['productDeliveryMethodSelector'].style.display="none";
		singleText['productDeliveryMethodSingle'].style.display="";
	}
	if (isSingleLanguage()) {
		selectBox['productLanguageSelector'].style.display="none";
		singleText['productLanguageSingle'].style.display="";
	}
	if (isSingleSoftwareType()) {
		selectBox['productSoftwareTypeSelector'].style.display="none";
		singleText['productSoftwareTypeSingle'].style.display="";
	}
}
 
function purchaseItem(skuLang){
	document.getElementById("iAddToCartSkuId").value=currentSku.getId();
	if(document.getElementById("iAddToCartSkuLang"))
       document.getElementById("iAddToCartSkuLang").value=skuLang;
 	if(document.getElementById("iAddToCartQuantity") && document.getElementById("volumeLicenseQuantity_quantity")){
 		document.getElementById("iAddToCartQuantity").value = document.getElementById("volumeLicenseQuantity_quantity").value;
 		if (!intValidate.validate(1,9999,document.getElementById("quantityErrorMessage"))) return;	  
	}
 
	// check for upgrade validation
	if (SOFTWARE_TYPE[currentSku.getSoftwareType().toUpperCase()]==SOFTWARE_TYPE["UPGRADE"] && currentSku.getUpgradeValidationType()=="ulead") {
		openPopup('black', 'updateValid'); 
	} else {
		document.formProductAddToCart.submit();
	}
}

function purchaseSubscriptionItem(skuId, isLogin, elementId){
	var isSkuFree = "false";
	var validSerialNumber="";
 	if(document.getElementById(skuId+"_isFree")){
 		isSkuFree = document.getElementById(skuId+"_isFree").value;
 	}

   	if("true" == isSkuFree){
  		var isSerialValid = "false";
  	 	if(document.getElementById(skuId+"_isSerialValid")){
  	 		isSerialValid = document.getElementById(skuId+"_isSerialValid").value;
  	 	}

  		if("true" == isLogin){
  	   	  	if("true" == isSerialValid){
  	  	  	 	if(document.getElementById("tmpScSerialNumber")){
  	  	  	 		validSerialNumber=document.getElementById("tmpScSerialNumber").innerHTML;
  	  	  	 	}
  	  	  	}

  	   	  	//document.associateScAccoutForm.submit();
 	 	 	var tosTarget="/corel/subscription/termsOfService.jsp?sku="+skuId;
 	 		if(validSerialNumber!=""){
 	 			tosTarget=tosTarget+"&subscriptionSerialNumber="+validSerialNumber;
 	 		}	
 	 		window.location.href=tosTarget;
 	 		
 		}else{
 		 	if(document.getElementById(elementId)){
 	 	 		document.getElementById(elementId).href += "?sku="+skuId;
 	 	 		if("true" == isSerialValid){
 	 	 			document.getElementById(elementId).href += "&serial=true";
 	 	 		}
 	 	 	}
 	 	 	return;
 		} 

 	}else{
 		if("false" == isLogin && document.getElementById(elementId)){
 			document.getElementById(elementId).href = "#";
 		}
 		document.formProductAddToCart.submit();
 	}
}

function updateValidateLogin(){
	document.updateValidForm.redirectUrl.value += "&skuId=" + currentSku.getId()+"&buyItem=true";  
	document.updateValidForm.submit();
}

function applySerialNumber(){
	validateUpgrade();
}

// Function to get the update validation
function validateUpgrade() {
	
	var queryStr="?upgradeSkuId="+currentSku.getId()+"&serialNumber="+document.getElementById("serialNumber").value;
	getJson("../ajax/ugvalValidateQualifyingProductSerial.jsp"+queryStr,upgradeValidateDisp,error);
}		

function upgradeValidateDisp(data) {
	if (data.response == 'valid') {
		document.getElementById("iAddToCartSkuId").value=currentSku.getId();
		document.formProductAddToCart.submit();
	} else {
		document.getElementById("upgradeValidationError").style.display = "inline";
	}
}

function getCurrentLicensePrice(maxQuantity, currentOrderId) {
	var queryStr="?currentSkuId="+currentSku.getId()+"&maxQuantity="+maxQuantity+"&currentOrderId="+currentOrderId;
	getJson("../ajax/currentLicensePrice.jsp"+queryStr,
			function(cartJason){ 
				
				var priceTable = document.getElementById("volumePriceContenTable");
				//reset row, keep row 1(title),2(col name) and last(over limit) only
				while(priceTable.rows.length > 3){
					priceTable.deleteRow(priceTable.rows.length-2);
				}
				
				var tr;
				for (var i=0; i<cartJason.prices.length; i++) { 
					
					tr = priceTable.insertRow(priceTable.rows.length-1);
					var colQuantity = tr.insertCell(0);
					var colPrice = tr.insertCell(1);
					colQuantity.innerHTML=""+ cartJason.prices[i].levelMin + " - " + cartJason.prices[i].levelMax;
					colPrice.innerHTML=""+ cartJason.prices[i].price; 
				} 
			}
			,error);
	 
}	

function validateLicenseProductSerialNumber(e){
	validateLicenseProductUpgrade();
}

function validateLicenseProductSerialNumberAndSetId(currentUpgradeSkuId){
	upgradeLicenseSkuId = currentUpgradeSkuId; 
	validateLicenseProductUpgrade();
}

// Function to get the update validation for license product
function validateLicenseProductUpgrade() { 
 	var queryStr="?upgradeSkuId="+upgradeLicenseSkuId+"&serialNumber="+document.getElementById("licenseProductSerialNumber").value; 
	getJson("../ajax/ugvalValidateQualifyingProductSerial.jsp"+queryStr,upgradeLicenseProductValidateDisp,error);
}	

function upgradeLicenseProductValidateDisp(data) {
	if (data.response == 'valid') {
		licenseProductUpgradeValid();
		if (data.sessionValue == 'false') { 
			document.getElementById("upgradeLicenseProductValidationContent").style.display = "none";
			document.getElementById("upgradeLicenseProductValidationOk").style.display = "block";
			document.getElementById("upgradeLicenseProductValidationError").style.display = "none";
			document.getElementById("licenseProductSerialNumberRow").style.display = "none";
			document.getElementById("validateUpgradePriceLink").style.display = "none";
			document.getElementById("cancelUpgradePriceLink").style.display = "none";
			document.getElementById("continueUpgradePriceLink").style.display = "block";
			//document.getElementById("iAddToCartSkuId").value=currentSku.getId();
			//document.formProductAddToCart.submit();
		} 

	} else {
		document.getElementById("upgradeLicenseProductValidationError").style.display = "block";
	}
}

function licenseProductUpgradeValid(){
	if(upgradeLicenseSkuId && upgradeLicenseSkuId !=""){
		changeSkuById(upgradeLicenseSkuId);

		document.getElementById("upgradePriceLinkDiv").style.display = "none";
		document.getElementById("volumeLicenseQuantity_quantity").value = 1;
		
		// add upgrade text
		var displayNameElement = document.getElementById('productDisplayName');
		displayNameElement.innerHTML += " - "+currentSku.getSoftwareTypeDisplay();
	}
}

var upgradeLicenseSkuId = "";
function resetLicenseProductValidationPopup(currentUpgradeSkuId){
	upgradeLicenseSkuId = currentUpgradeSkuId;
 	document.getElementById("upgradeLicenseProductValidationError").style.display = "none";
}
 


var requestForm ="PPP";
function sendLicenseProductForm(page) {
	document.getElementById("volumeLicenseRequestForm").style.display = "none";
	document.getElementById("volumeLicenseRequestFormLoading").style.display = "block";
	requestForm = "PPP"
	if(page){
		requestForm =page;
	} 
	submitByPost(
		document.location.protocol+"//"+document.location.host+document.location.pathname+"?submit",
		"volumeLicenseRequestForm",
		sendLicenseProductFormDone,
		error
	);
}

function sendLicenseProductFormDone(data) {
	if(requestForm == "cartSummary"){
		getJson("ajax/licenseRequestValidate.jsp",checkFormValidation,error); 
	}else{
		getJson("../ajax/licenseRequestValidate.jsp",checkFormValidation,error); 
	} 
}

function checkFormValidation(data) {
	var listHTML="";
	if(!data || data.errorList==null || data.errorList.length==0){
		document.getElementById("formMsgError").innerHTML=listHTML;
		
		//document.getElementById("volumeLicenseRequestForm").style.display = "none";
		document.getElementById("volumeLicenseRequestFormLoading").style.display = "none";
		document.getElementById("volumeLicenseRequestFormDone").style.display = "block";
	}else{ 
		document.getElementById("volumeLicenseRequestFormLoading").style.display = "none";
		document.getElementById("volumeLicenseRequestForm").style.display = "block";
		for (var i=0;i<data.errorList.length;i++) {
			listHTML += data.errorList[i]+"<br/>";
		}  
		document.getElementById("formMsgError").innerHTML=listHTML;
 	}
 
}

function resetLicenseProductForm() {
	document.getElementById("volumeLicenseRequestForm").style.display = "";
	document.getElementById("volumeLicenseRequestFormDone").style.display = "none"; 
}
//Function to get price of volume license 
function changeLicenseQuantity(pId, quantity, maxQuantity,hasUpgradeSku,currentOrderId) {
 
	if (!intValidate.validate(1,9999,document.getElementById("quantityErrorMessage"))) return;
	 
  
	if(parseInt(quantity) > parseInt(maxQuantity)){
		document.getElementById("softwareRowOverLimit").style.display = "";
		document.getElementById("softwareRow4").style.display = "none";
		document.getElementById("unitPriceDiv").style.display = "none";
		document.getElementById("multiplySign").style.display = "none";
		document.getElementById("addToCartDisableBtn").style.display = "";
		document.getElementById("addToCartBtn").style.display = "none";
		document.getElementById("upgradePriceLinkDiv").style.display = "none";
		
	}else{ 
 
		document.getElementById("softwareRowOverLimit").style.display = "none";
		document.getElementById("softwareRow4").style.display = "";
		document.getElementById("unitPriceDiv").style.display = "";
		document.getElementById("multiplySign").style.display = "";
		document.getElementById("addToCartBtn").style.display = "";
		document.getElementById("addToCartDisableBtn").style.display = "none";
		//check current sku 
		if (SOFTWARE_TYPE[currentSku.getSoftwareType().toUpperCase()]== SOFTWARE_TYPE["FULL"] && hasUpgradeSku == "true"){
			document.getElementById("upgradePriceLinkDiv").style.display = "";
		}
		
		var queryStr="?skuId="+currentSku.getId()+"&pId="+pId+"&quantity="+quantity+"&currentOrderId="+currentOrderId;
  		getJson("../ajax/volumeLicensePrice.jsp"+queryStr,updateVolumeLicense,error);	
	}

}		

function updateVolumeLicense(data) {  
 	if(data.response == 'valid'){ 
 		document.getElementById("productPriceWas").innerHTML=data.originalAmount;
 		document.getElementById("productPriceOffer").innerHTML=data.discountAmount;	 
	 	document.getElementById("unitProductPriceOffer").innerHTML=data.unitDiscountPrice;
	 	
 		if(data.originalAmount == data.discountAmount){
 			document.getElementById("productPriceWas").style.display="none";
 			document.getElementById("productPriceOffer").className="lcnOfrPrc";
 			var curCdeElement = document.getElementById('prdPrcCurCde');
 			if(curCdeElement){
 				curCdeElement.className="lcnCurCde";
 			}
 		}else{
 			document.getElementById("productPriceWas").style.display="block";
            document.getElementById("productPriceOffer").className="lcnOfrPrcPromo";
        	var curCdeElement = document.getElementById('prdPrcCurCde');
 			if(curCdeElement){
 				curCdeElement.className="lcnCurCdePromo";
 			}
 		}
 		if(document.getElementById('unitProductPriceWas').innerHTML == data.unitDiscountPrice){
 			document.getElementById("unitProductPriceWas").style.display="none";
            document.getElementById("unitProductPriceOffer").className="lcnUnitOfrPrc";
 		}else{
 			document.getElementById("unitProductPriceWas").style.display="block";
            document.getElementById("unitProductPriceOffer").className="lcnUnitOfrPrcPromo";
 		}
 		
 		
	}else{
		document.getElementById("productPriceOffer").innerHTML=data.originalAmount;
	}	 
}

function updateProductPrice() {
 	var priceWasElement = document.getElementById('productPriceWas');
	var priceOfferElement = document.getElementById('productPriceOffer');
	var unitProductPriceWas = document.getElementById('unitProductPriceWas');
	var unitProductPriceOffer = document.getElementById('unitProductPriceOffer');
	 
	// found 1st sku for specific software type, delivery method and language
	currentSku = getSku(getSelectedSoftwareType(),getSelectedDeliveryMethod(),getSelectedLanguage());
	
	if (!currentSku) {
		if(priceWasElement && priceOfferElement){
			priceWasElement.style.display="none";
			priceOfferElement.style.display="none";	
		}

		if(unitProductPriceWas && unitProductPriceOffer){
			unitProductPriceWas.style.display="none";
			unitProductPriceOffer.style.display="none";
		} 
		return;
	} 
 	
	if (!currentSku.isOnSale()) {
		// no discount
		if(priceWasElement && priceOfferElement){
			priceWasElement.style.display="none";
			priceOfferElement.style.display="block";
			priceOfferElement.innerHTML = currentSku.getFormattedListPrice();
	 		priceOfferElement.className="Pricing8";
		}

		
		if(unitProductPriceWas && unitProductPriceOffer){
			unitProductPriceWas.style.display="none";
			unitProductPriceOffer.style.display="block";
			unitProductPriceOffer.innerHTML = currentSku.getFormattedListPrice();
			unitProductPriceOffer.className="Pricing8";
		}
 		
	} else {
		// discounted
		if(priceWasElement && priceOfferElement){
			priceWasElement.style.display="block";
			priceWasElement.innerHTML = currentSku.getFormattedListPrice();

	 		priceOfferElement.style.display="block";
	 		priceOfferElement.innerHTML = currentSku.getFormattedSalePrice();
	 		priceOfferElement.className="Pricing3";	
		}

		
		if(unitProductPriceWas && unitProductPriceOffer){
			unitProductPriceWas.style.display="block";
			unitProductPriceWas.innerHTML = currentSku.getFormattedListPrice();
			unitProductPriceOffer.style.display="block";
			unitProductPriceOffer.innerHTML = currentSku.getFormattedSalePrice();
			unitProductPriceOffer.className="Pricing3";
		}
		
		//double check
 		if(currentSku.getFormattedListPrice() == currentSku.getFormattedSalePrice()){
 			if(priceWasElement && priceOfferElement){
 				priceWasElement.style.display="none";
 				priceOfferElement.className="Pricing8";
 			}

			
			if(unitProductPriceWas){
				unitProductPriceWas.style.display="none";
				unitProductPriceOffer.className="Pricing8";
			}
 		}
		
	}
	updateDisplayName();
	updateVatLabel();
}



function getAvailableLanguages(softwareType, deliveryMethod) {
	var languages = new Array();
	for (var i=0; i<skus.length; i++) {
		if (softwareType==SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()]
			&& deliveryMethod==DELIVERY_METHOD[skus[i].getDeliveryMethod().toUpperCase()]) {
			
			var skuLanguages = skus[i].getLanguages();
			var skuLangCodes = skus[i].getLanguageCodes();
			
			for (var j=0; j<skuLanguages.length; j++) {
				var isFound = false;
				for (var k=0; k<languages.length; k++) {
					if (skuLanguages[j]==languages[k]) {
						isFound = true;
						break;
					}
				}
				if (!isFound) {
				    var langPair = new Array();
                    langPair.push(skuLangCodes[j]);
                    langPair.push(skuLanguages[j]);
				    languages.push(langPair);
				}
			}
		}
	}
 	return languages;
}

function getSku(softwareType, deliveryMethod, language) {
	
	for (var i=0; i<skus.length; i++) {
		if (softwareType==SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()]
			&& deliveryMethod==DELIVERY_METHOD[skus[i].getDeliveryMethod().toUpperCase()]) {
			var languages = skus[i].getLanguageCodes(); 
			for (var j=0; j<languages.length; j++) {
				if (language==languages[j]) return skus[i];
			}
		}
	}
	return (skus.length>0 ? skus[0] : null);
}

function getSkus(softwareType) {
	var skuList = new Array();
	for (var i=0; i<skus.length; i++) {
		if (softwareType==SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()]) {
			skuList[skuList.length] = skus[i];
		}
	}
	return (skuList.length>0 ? skuList : null);
}

function changeSkuById(skuId) {
	var skuToChange;
 	for (var i=0; i<skus.length; i++) {
 		if (skuId==skus[i].getId()) {
 			skuToChange= skus[i];
			currentSku = skus[i]; 
			if(currentSku.getDeliveryMethod() != "ELD"){
  			myTabs.set('activeIndex', SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()]);	
			}
			loadSoftwareType(SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()]);
 			loadDeliveryMethod(SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()]);
			for (var j=0; j<selectBox['productDeliveryMethodSelector'].options.length; j++) {
				// point to the delivery method of sku on drop box
				if (selectBox['productDeliveryMethodSelector'].options[j].value==DELIVERY_METHOD[skus[i].getDeliveryMethod().toUpperCase()]) {
					selectBox['productDeliveryMethodSelector'].selectedIndex = j;
					break;
				}
			}

			if ("Physical"==skuToChange.getDeliveryMethod()) {
				document.getElementById('shippingPolicyLink').style.display = "";
				document.getElementById('downloadInstructionLink').style.display = "none";
			} else if ("Download"==skuToChange.getDeliveryMethod()) {
				document.getElementById('shippingPolicyLink').style.display = "none";
				document.getElementById('downloadInstructionLink').style.display = "";
			} 			
			
			var useStoreLang = false;
			for(var j=0;j<skus[i].getLanguageCodes().length;j++) {
                if(skus[i].getLanguageCodes()[j] == storeLangCode) {
                       useStoreLang = true;
                       break;
                   }
			}
			loadLanguage(SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()],DELIVERY_METHOD[skus[i].getDeliveryMethod().toUpperCase()],useStoreLang?storeLangCode:skus[i].getLanguageCodes()[0]);
			updateProductPrice();
		}
	}
}

function isSingleSoftwareType() {
	return selectBox['productSoftwareTypeSelector'].options.length<2;
}
function getSelectedSoftwareType() {
	return selectBox['productSoftwareTypeSelector'].options.length>0 ? selectBox['productSoftwareTypeSelector'].value : null;
}
function isSingleDeliveryMethod() {
	return selectBox['productDeliveryMethodSelector'].options.length<2;
}
function getSelectedDeliveryMethod() {
	return selectBox['productDeliveryMethodSelector'].options.length>0 ? selectBox['productDeliveryMethodSelector'].value : null;
}
function isSingleLanguage() {
	return selectBox['productLanguageSelector'].options.length<2;
}
function getSelectedLanguage() {
	return selectBox['productLanguageSelector'].options.length>0 ? selectBox['productLanguageSelector'].value : null;
}

function loadDeliveryMethod(softwareType) {
	var lastDeliveryMethod = getSelectedDeliveryMethod();
	
	// drop box clean up
	selectRemoveAllOptions(selectBox['productDeliveryMethodSelector']);
	
	// getting delivery method from skus for specific software type
	var skuList = getSkus(softwareType);
	for (var i=0; i<skuList.length; i++) {
		if (!selectContainsOption(selectBox['productDeliveryMethodSelector'], DELIVERY_METHOD[skuList[i].getDeliveryMethod().toUpperCase()])) {
			addOption(selectBox['productDeliveryMethodSelector'], DELIVERY_METHOD[skuList[i].getDeliveryMethod().toUpperCase()], html_entity_decode(skuList[i].getDeliveryMethodDisplay()));
			
			// try select the last delivery method value to select box
			if (selectBox['productDeliveryMethodSelector'].options[selectBox['productDeliveryMethodSelector'].options.length-1].value==lastDeliveryMethod) {
				selectBox['productDeliveryMethodSelector'].selectedIndex=selectBox['productDeliveryMethodSelector'].options.length-1;
			}
		}
	}
	
	// handling layout for delivery method. show text box only for single delivery method
	if (isSingleDeliveryMethod()) {
		selectBox['productDeliveryMethodSelector'].style.display="none";
		singleText['productDeliveryMethodSingle'].style.display="";
		singleText['productDeliveryMethodSingle'].innerHTML = selectBox['productDeliveryMethodSelector'].options[0].text;
	} else {
		selectBox['productDeliveryMethodSelector'].style.display="";
		singleText['productDeliveryMethodSingle'].style.display="none";
	}
}
function html_entity_decode(str) {
	  var tarea=document.createElement('textarea'); // the "content" part is needed in buttons
	  tarea.innerHTML = str;
	  return tarea.value;
}
function sortLanguage(a, b) {
    var value1 = a[1].toLowerCase();
    var value2 = b[1].toLowerCase();
    if (value1 > value2) return(1);
    if (value1 < value2) return(-1);
    return(0);
}

function loadLanguage(selectedSoftwareType, selectedDeliveryMethod , targetLanguage) {
	var lastLanguage = getSelectedLanguage();

	// drop box clean up
	selectRemoveAllOptions(selectBox['productLanguageSelector']);
	
	// getting languages from skus for specific software type and delivery method
	var languages = getAvailableLanguages(selectedSoftwareType,selectedDeliveryMethod);
	
	languages.sort(sortLanguage);
	
	for (var i=0; i<languages.length; i++) {
		if (!selectContainsOption(selectBox['productLanguageSelector'], languages[i][0])) {
			addOption(selectBox['productLanguageSelector'], languages[i][0], languages[i][1]); 
			
		}
	}
	if (selectBox['productLanguageSelector'].options.length>1 /*&& selectBox['productLanguageSelector'].options[selectBox['productLanguageSelector'].options.length-1].value==lastLanguage*/) {
 		 
		if(targetLanguage == null){
			if(lastLanguage!=null){
				targetLanguage = lastLanguage;
			}else{
				//select store default language
				targetLanguage = storeLangCode; 
			}	
		} 
		
		var targetLanguageFound=false;
		// try to select the target language 
		for (var i=0; i<selectBox['productLanguageSelector'].options.length; i++) {
			if(selectBox['productLanguageSelector'].options[i].value == targetLanguage){ 
				selectBox['productLanguageSelector'].selectedIndex=i; 
				targetLanguageFound=true;
				break;
			} 
		} 
		
		// if the target language is not found, use English as the default
		if(targetLanguageFound==false){
			for (var i=0; i<selectBox['productLanguageSelector'].options.length; i++) {
				if(selectBox['productLanguageSelector'].options[i].value == "en"){ 
					selectBox['productLanguageSelector'].selectedIndex=i; 
					break;
				} 
			} 
		}	
	}
	
	// handling layout for language. show text box only for single language
	if (isSingleLanguage()) {
  
		selectBox['productLanguageSelector'].style.display="none";
		singleText['productLanguageSingle'].style.display="";
		
		// special handling for no languages found on skus
		if (selectBox['productLanguageSelector'].options.length>0) {
            singleText['productLanguageSingle'].innerHTML = selectBox['productLanguageSelector'].options[0].text;
        } else {
            singleText['productLanguageSingle'].innerHTML = "";
        }
	} else {
 		
		selectBox['productLanguageSelector'].style.display="";
		singleText['productLanguageSingle'].style.display="none";
	}
}

function changeSoftwareType(softwareType) {
    var typeSelector = document.getElementById('productSoftwareTypeSelector');
    if(typeSelector) {
        for (var i=0;i<typeSelector.length;i++) {
			if (typeSelector[i].value == softwareType) {
                typeSelector[i].selected = true;
                break;
			}
		}
    }
    if(currentSku.getDeliveryMethod() != "ELD"){
	// set description tab to specific software type
	myTabs.set('activeIndex', softwareType);
    }

	// reload delivery method and language for specific software type
	loadDeliveryMethod(softwareType);
 	changeDeliveryMethod();
 }

function changeDeliveryMethod() {
	var lastLanguage = getSelectedLanguage();
 	// reload language for specific software type and delivery method
	loadLanguage(getSelectedSoftwareType(),getSelectedDeliveryMethod());
	
	// show download instruction link for "Download"(DOWNLOAD:1) or shipping policy link for "Box"(PHYSICAL:0)
	if (getSelectedDeliveryMethod()==DELIVERY_METHOD["PHYSICAL"]) {
		document.getElementById('shippingPolicyLink').style.display = "";
		document.getElementById('downloadInstructionLink').style.display = "none";
	} else if (getSelectedDeliveryMethod()==DELIVERY_METHOD["DOWNLOAD"]) {
		document.getElementById('shippingPolicyLink').style.display = "none";
		document.getElementById('downloadInstructionLink').style.display = "";
	} 
	updateProductPrice();
}

function changeLanguage() {
	updateProductPrice();
}


function selectContainsOption(selectbox, optionValue) {
	for (var i=0; i<selectbox.options.length; i++) {
		if (selectbox.options[i].value==optionValue) return true;
	}
	return false;
}			

function selectRemoveAllOptions(selectbox) {
	while (selectbox.options.length>0) selectbox.remove(0);
}				

function addOption(selectbox, value, text) {
	var optn = document.createElement("option");
	optn.text = text;
	optn.value = value;
	selectbox.options.add(optn);
}

function getOption(sel) {
	if (sel.selectedIndex>=0) return sel.options[sel.selectedIndex].value;
	return null;
}



function updateDisplayName(){
	var displayNameElement = document.getElementById('productDisplayName');
	
	// found 1st sku for specific software type, delivery method and language
	currentSku = getSku(getSelectedSoftwareType(),getSelectedDeliveryMethod(),getSelectedLanguage());
	if (!currentSku) {
		displayNameElement.style.display="none";
		return;
	} 
	
	displayNameElement.innerHTML = currentSku.getDisplayName();
}

function updateVatLabel(){
	var vatLabelElement = document.getElementById('vatLabel');
	
	// found 1st sku for specific software type, delivery method and language
	currentSku = getSku(getSelectedSoftwareType(),getSelectedDeliveryMethod(),getSelectedLanguage());
	if (!currentSku) {
		if(vatLabelElement)
			vatLabelElement.style.display="none";
		return;
	} 
	
	if(vatLabelElement){
		if(currentSku.getVatLabelText()==""){
			vatLabelElement.innerHTML = "";
		}		
		else{
			vatLabelElement.innerHTML = currentSku.getVatLabelText();
		}	
		
	}	
}

function loadSoftwareType(softwareType) {
	// drop box clean up
	selectRemoveAllOptions(selectBox['productSoftwareTypeSelector']);
	
	// load SoftwareType from skus
	for (var i=0; i<skus.length; i++) {
		if (!selectContainsOption(selectBox['productSoftwareTypeSelector'], SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()])) {
			addOption(selectBox['productSoftwareTypeSelector'], SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()], html_entity_decode(skus[i].getSoftwareTypeDisplay()));
			currentSku = skus[i];
		}
	}
	
	// handling layout for software type. show text box only for single software type
	if (isSingleSoftwareType()) {
		selectBox['productSoftwareTypeSelector'].style.display="none";
		singleText['productSoftwareTypeSingle'].style.display="";
		singleText['productSoftwareTypeSingle'].innerHTML = selectBox['productSoftwareTypeSelector'].options[0].text;
	} else {
		for (var i=0; i<selectBox['productSoftwareTypeSelector'].options.length; i++) {
			// point to the software type on drop box for specified software type from param
			if (selectBox['productSoftwareTypeSelector'].options[i].value==softwareType) {
				selectBox['productSoftwareTypeSelector'].selectedIndex = i;
				break;
			}
		}
	}
	// process for loading delivery method and language
	changeSoftwareType(softwareType);
}

// use if no specified software type passed by param
function getDefaultSoftwareType(type) {
	if (skus.length==0) return null;
	
	// set software type as desired software type if it's found on skus
	for (var i=0; i<skus.length; i++) {
		if (SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()]==type) return type;
	}
	
	// desired software type not found. Try look for "FULL" as "FULL" should be the default.
	for (var i=0; i<skus.length; i++) {
		if (SOFTWARE_TYPE[skus[i].getSoftwareType().toUpperCase()]==SOFTWARE_TYPE["FULL"]) return SOFTWARE_TYPE["FULL"];
	}
	
	// "FULL" not found too. So just take software type from 1st sku. It probably will be "Upgrade".
	return SOFTWARE_TYPE[skus[0].getSoftwareType().toUpperCase()];
}

function error(error) {
	alert("error: "+error);
}
