/*
    Javascript functions used in SmpPortlet Tool.
*/

/**
 * Gets the XML http request object which is required for AJAX calls.
 *
 * @return The XML http request object.
 */
function getXMLHttpRequest() {
    var xhr;
    try {
        xhr = new ActiveXObject("Microsoft.XMLHTTP"); // Trying Internet Explorer
    } catch (e) {
        xhr = new XMLHttpRequest();
    }
    return xhr;
}


/**
 * Page submission.
 */
function submitPortlet(action, value, eyesite) {
	var eyesiteAction = getEyesiteAction(eyesite);
	document.smpPortletForm.USER_ACTION.value=eyesiteAction
    if( action=="SMP_RESULTS_PAGE" ) {
        document.smpPortletForm.productId.value = value;
    } else {
    	document.smpPortletForm.productId.value = "";
    }
    document.smpPortletForm.userAction.value = action;
    document.smpPortletForm.submit();
}

/**
 * Verifies the serial number.
 */
function checkSerialNumber(action) {

    var xhr = getXMLHttpRequest();

    // callback handler
    xhr.onreadystatechange = function () {
        // clear error message area
        var errorMsgElem = document.getElementById("smpPortletError");
        if(errorMsgElem!=null) {
            errorMsgElem.innerHTML = "";
        }

        var countryLinks = "";
        var countryCounter = 0;
        var paCounter = 0;
        var errorMsg = false;
        var redirect = false;
        //read the xml
        if (xhr.readyState == 4) {
            if(xhr.responseXML!=null) {
                var xml_response = xhr.responseXML;
                var serial_tag_idx = 0;
                var serial_tag_count = xml_response.getElementsByTagName("smpCheckSerial")[0].childNodes.length;
                while( serial_tag_idx<serial_tag_count ) {
                    var curr_node = xml_response.getElementsByTagName("smpCheckSerial")[0].childNodes[serial_tag_idx];

                    // productId
                    if( curr_node.nodeName=="productId" && curr_node.childNodes.length>0 ) {
                        redirect = true;
                        submitPortlet( "SMP_RESULTS_PAGE", curr_node.childNodes[0].nodeValue,'SERIAL_NUMBER' );

                    //otherCountry
                    } else if( curr_node.nodeName=="otherCountry" && curr_node.childNodes.length>0 ) {
                        if(countryCounter ==0) {
                            removeSelectOptions("smpSiteListSel");
                        }
                        addOption("smpSiteListSel",curr_node.attributes.getNamedItem("countryName").nodeValue,curr_node.childNodes[0].nodeValue);
                        countryCounter++;

                    // msg
                    } else if( curr_node.nodeName=="msg" && curr_node.childNodes.length>0) {
                        errorMsg = true;
                        if(errorMsgElem!=null) {
                            errorMsgElem.innerHTML += curr_node.childNodes[0].nodeValue + "<br/>";
                        }

                    //partNo
                    } else if(curr_node.nodeName=="partNo" && curr_node.childNodes.length>0) {
                        if( countryCounter==0 ) {
                            if( paCounter==0 ) {
                                removeSelectOptions("partNoSel");
                            }
                            paCounter++;
                            addOption("partNoSel",curr_node.childNodes[0].nodeValue,curr_node.childNodes[0].nodeValue);
                        }
                    }
                    serial_tag_idx++;
                }
                // first display the serial number
                if(countryCounter) {
                    changeStyleClass("display_filter","display_site_list");
                } else if(paCounter>1) {
                    changeStyleClass("display_filter","display_part_number");
                } else if(paCounter==1) {
                    removeSelectOptions("partNoSel");
                }
                if (errorMsg) {
                    // Error message - show the portel error in the footer
                    showDivSelect("portlet_error");
                } else {
                    hideDivSelect("portlet_error");
                }
                if (!redirect) {
                    // remove the loading layer
                    changeStyleClass('smp_portlet','')
                }
            } else{
                $('#serialNumber').val("");
            }
            // set default focus based on visible layer
            setDefaultFocus();
        }
    };

    var formProperties = "&userAction="+action+"&USER_ACTION="+getEyesiteAction('SERIAL_NUMBER');
    if( 'CHECK_PRODUCT' == action) {
        formProperties += "&partNumber=" + encodeURIComponent(document.smpPortletForm.partNoSel.value);
    } else if ('CHECK_SERIAL' == action) {
        formProperties += "&serialNumber=" + encodeURIComponent(document.smpPortletForm.serialNumber.value);
    }
	
    // Hide any errors that are visible in the footer area.
    hideDivSelect("portlet_error");
    // display the loading layer
    changeStyleClass('smp_portlet','loading')
    // $(".loading").fadeIn("slow"); 
    xhr.open("GET", smpControllerUrl+formProperties, true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send(null);
}

/* Executed when the reset button is clicked */
function resetField() {
	// reset the value
	$('#serialNumber').val("");
    changeStyleClass("display_filter","display_serial_number");
    // hide the footer when we reset column 1
    $("#portlet_error").hide();
    setDefaultFocus();
}

function setDefaultFocus() {
	if ($('#display_filter').hasClass("display_serial_number")) {
		$('#serialNumber').focus();
	} else if ($('#display_filter').hasClass("display_part_number")) {
		$('#partNoSel').focus();
	} else if ($('#display_filter').hasClass("display_site_list")) {
		$('#smpSiteListSel').focus();
	}
}

/* function to display Help in a popup*/
function displayHelp(url) {
    var popupWin = window.open(url,"help","menubar=no,scrollbars=no,width=510,height=455,screenX=1,screenY=1");
}

/**
 * Show hidden portlet layer.
 */
 
 function displaySupportMyProduct() {
    // Show modal only if the layer exists
    if(document.getElementById('smp_overlay')) {
        $('#smp_overlay').modal();
        $('#serialNumber').focus();
    }
}
 
function displaySupportMyProduct_old() {
    
	// Show modal only if the layer exists
    if(document.getElementById('smp_overlay')) {
        $('#smp_overlay').modal({
            onOpen: function (dialog) {
                dialog.overlay.fadeIn('fast', function () {
                    dialog.container.show('fast', function () {
                        dialog.data.slideDown('slow');
                    });
                });
            },
            onShow: function(dialog) {
                $('#serialNumber').focus();
            }
        });
    }
}

/**
 * hide hidden portlet layer.
 */
function hideSupportMyProduct(){
    $.modal.close(); 
}

function showDivSelect(d){
    document.getElementById(d).style.display = "block";
}

function hideDivSelect(d){
    document.getElementById(d).style.display = "none";
}

// select tag id as param
function removeSelectOptions(sel){
    var selectbox = document.getElementById(sel);
    var i;
    for (i = selectbox.length - 1; i>=0; i--) {
        selectbox.remove(i);
    }
}

/* function to add options to a select dynamically */
function addOption(sel,text,value){
    var optn = document.createElement("OPTION");
    optn.text = text;
    optn.value = value;
    selectbox = document.getElementById(sel);
    if( selectbox != null ){
        selectbox.options.add(optn);
    }
}

/* function to change the class of a div dynamically */
function changeStyleClass(id,styleClass) {
    document.getElementById(id).className=[styleClass];
}

/* Capture the enterkey in the portlet form */
function whichkey(evt) {
    var evt = (evt) ? evt : ((event) ? event : null);
    switch (evt.keyCode) {
        case 13:
            checkSerialNumber('CHECK_SERIAL');
            break;
        default:
            //nothing
    }
}

// function to return the correct eyesite action value
function getEyesiteAction(action) {
	if ('SERIAL_NUMBER' == action) {
		return 'Serial number';
	} else if ('PRODUCT_SELECT' == action) {
		return 'Product Select';
	} // AUTO_DETECT is managed within SmpAutoDetectController
}

// function to enable or disable the product selection Go button.
function toggleGoButton (eleId) {
	frm = document.smpPortletForm;
	if (frm.smpModel.options.length > 0 && frm.smpModel.options.selectedIndex > 0) {
		document.getElementById(eleId).disabled=false; // enable the button
	} else {
		document.getElementById(eleId).disabled=true; // disable the button
	}
}
