/// <reference path="../js/jquery-1.6.1.js" />

var vinTimeoutId = 0;

function AttachFCAReload() {
	window.onblur = function() { window.onfocus = function() { ReloadWindow(); }; };
}

function AttachFCAWindow() {
	if (fca_window == null) {
			
		//Do not change the name of this window. It is externally linked to the FCA Catalog and the names must match its configuration
		var fca_window = window.open(fcaUrl, "FCAWindow", "toolbar=no, menubar=no, location=no, status=no, resizable=yes, left=0, top=0, height="+(screen.availHeight-30)+",width="+(screen.availWidth-10), true);
		
		window.onfocus = function() { ReloadWindow(); };
	}
}

function ReloadWindow() {
	PageMethods.DoReload(OnReloadSuccess, OnReloadFailure);
}

function Reload() {
	window.location.reload();
}

function OnReloadSuccess(result) {
	if (result)
		Reload();
}

function OnReloadFailure(error) {
	alert(error);
}

function ShowPopupWindow(popupControlName, windowName) {
	if (popupControlName == "pcCartTools")
		pcCartTools.ShowWindowAtElement(pcCartTools.GetWindowByName(windowName), this);
	else if (popupControlName == "pcMessages")
		pcMessages.ShowWindowAtElement(pcMessages.GetWindowByName(windowName), this);
}

function HidePopupWindow(popupControlName, windowName) {
	if (popupControlName == "pcCartTools")
		pcCartTools.HideWindow(pcCartTools.GetWindowByName(windowName));
	else if (popupControlName == "pcMessages")
		pcMessages.HideWindow(pcMessages.GetWindowByName(windowName));
	else if (popupControlName == "popupDealerSearchJS")
		popupDealerSearchJS.HideWindow(popupDealerSearchJS.GetWindowByName(windowName));
}

function OnAddPartPopupWindowShown(s, e) {
	$.ajax({
	    type: "POST",
	    contentType: "application/json; charset=utf-8",
	    url: "/Services/Omniture.asmx/SetOmnitureData_ShoppingCart",
	    data: '{PageName: "fpol: cart: add a part"}',
	    dataType: "json",
	    success: GetOmnitureDataFromSession_Success,
	    error: GetOmnitureDataFromSession_Fail
	});
}

function OnPopupWindowShown(s, e) {
    // Log Omniture statistics
    var pageName = "";
	switch (e.window.name) {
	    case "pwUploadStockOrder":
	        pageName = "fpol: cart: upload stock order";
	        break;
	    case "pwSendListOfParts":
	        pageName = "fpol: cart: send parts list";
	        break;
		case "pwSaveCart":
			pageName = "fpol: cart: save cart";
			break;
		case "pwViewSavedCarts":
			pageName = "fpol: cart: view saved carts";
			break;
    }
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/Services/Omniture.asmx/SetOmnitureData_ShoppingCart",
        data: '{PageName: "' + pageName + '"}',
        dataType: "json",
        success: GetOmnitureDataFromSession_Success,
        error: GetOmnitureDataFromSession_Fail
    });
}

function OnPopupWindowClose(s, e) 
{

	if (e.window.name=="pwViewSavedCarts" || e.window.name == "pwSaveCart")
	{
		PageMethods.HasSavedCarts(OnHasSavedCartsSuccess, OnHasSavedCartsFailure);
	}
	
}


function OnHasSavedCartsSuccess(result) {

	var btn = $get(lbtnViewSavedCarts_ID);

	if (typeof (btn) != 'undefined')
	{
		if (result)
		{
			btn.style.display = "inline";
		}
		else
		{
			btn.style.display = "none";
		}
	}
}

function OnHasSavedCartsFailure(error) {

}

function ViewSavedCartsClick()
{
	//change header text
	pcCartTools.GetWindowByName('pwViewSavedCarts').SetHeaderText("View Saved Carts");
}
function ManageCartsClick() {
	$.ajax({
	    type: "POST",
	    contentType: "application/json; charset=utf-8",
	    url: "/Services/Omniture.asmx/SetOmnitureData_ShoppingCart",
	    data: '{PageName: "fpol: cart: manage cart"}',
	    dataType: "json",
	    success: GetOmnitureDataFromSession_Success,
	    error: GetOmnitureDataFromSession_Fail
	});
	
	//change header text
	pcCartTools.GetWindowByName('pwViewSavedCarts').SetHeaderText("Manage Carts");
}

function DeleteSavedCartClick() {
	pcRemoveCart.Hide();
	
	$.ajax({
	    type: "POST",
	    contentType: "application/json; charset=utf-8",
	    url: "/Services/Omniture.asmx/SetOmnitureData_ManageCart",
	    data: '{LinkName: "delete"}',
	    dataType: "json",
	    success: GetOmnitureDataFromSession_Success,
	    error: GetOmnitureDataFromSession_Fail
	});
}

function RenameSavedCartClick() {
	//pcRenameCart.Hide();
	
	$.ajax({
	    type: "POST",
	    contentType: "application/json; charset=utf-8",
	    url: "/Services/Omniture.asmx/SetOmnitureData_ManageCart",
	    data: '{LinkName: "rename"}',
	    dataType: "json",
	    success: GetOmnitureDataFromSession_Success,
	    error: GetOmnitureDataFromSession_Fail
	});
}

function StockOrderUploadStart(s, e) {
	var rbYes = $get(rbHasHeaderRowYes_ID);
	var rbNo = $get(rbHasHeaderRowNo_ID);

	if (typeof (rbYes) != 'undefined')
		rbYes.disabled = 'disabled';
	if (typeof (rbNo) != 'undefined')
		rbNo.disabled = 'disabled';
}

function StockOrderUploadComplete(s, e) {
	if (!e.isValid)
		alert(e.errorText);
	else {
		var button = $get(btnRefreshParts_ID);
		if (typeof (button) != 'undefined')
			button.click();
	}

	var rbYes = $get(rbHasHeaderRowYes_ID);
	rbYes.checked = true;
	rbYes.removeAttribute('disabled');

	var rbNo = $get(rbHasHeaderRowNo_ID);
	rbNo.checked = false;
	rbNo.removeAttribute('disabled');
}


function OpenPrintPreview() {
	window.open('../Print/Commerce/ShoppingCartPrint.aspx', 'ShoppingCartPrintWindow', 'width=980,height=650,' +
        'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,copyhistory=no,resizable=yes');
}

function OnDealerSearchPopupClosed(s, e)
{
	PageMethods.GetHasSelectedDealerChanged(OnHasSelectedDealerChangedCallback);
	popupDealerSearchJS.SetContentUrl('about:blank');
}

function OnHasSelectedDealerChangedCallback(result)
{
	if(result)
		window.location.href = window.location.href;
}

function OnDealerSearchPopupPopup()
{
	//TODO: Remove hard coded url		
	popupDealerSearchJS.SetContentUrl('/Commerce/DealerSearch.aspx?popup=true&popupName=popupDealerSearchJS');
	popupDealerSearchJS.RefreshContentUrl();
}

function OnVINCallbackComplete(s, e)
{
	var spanSaved = $get('spanVINSaved');
	var spanInvalid = $get('spanVINInvalid');
	
	//Clear existing timeout if there is one
	try
	{ 
		clearTimeout(vinTimeoutId); 
	} 
	catch(err) {}
				
	HideVINMessage();
				
	if(e.result == "true" && spanSaved != null)
	{
		//spanSaved.style.display = ''; //Commented out per BT
		spanInvalid.style.display = 'none';
	}
	else if (e.result == "false" && spanInvalid != null)
	{			
		//spanSaved.style.display = 'none'; //Commented out per BT
		spanInvalid.style.display = '';		
	}
	else if (e.result == "nochange")
	{
		//Do nothing
	}
	
	vinTimeoutId = setTimeout('HideVINMessage()', 5000);		
}

function HideVINMessage()
{
	var spanSaved = $get('spanVINSaved');
	var spanInvalid = $get('spanVINInvalid');
	
	if(spanSaved != null)
	{
		spanSaved.style.display = 'none';
	}	
	if(spanInvalid != null)
	{
		spanInvalid.style.display = 'none';
	}	
}

//Call page method to validate if user has express checkout settings
function HasExpressCheckout() {
	PageMethods.HasExpressCheckout(OnHasExpressCheckoutSuccess, OnHasExpressCheckoutFail);
}

//Callback event. If true, then continue with postback, else show express popup.
function OnHasExpressCheckoutSuccess(result) {
	if (result) {
		var lbtnExpressCheckoutTop_UniqueID = $("input[id=hdnLbtnExpressCheckoutTopUniqueID]").val();
		__doPostBack(lbtnExpressCheckoutTop_UniqueID,'')
	} else {
		pcExpressLane.Show();
	}
}

function OnHasExpressCheckoutFail(result) {
	alert(result);
}

//Express Checkout Button settings
$(document).ready(function() {
    $(".ExpressCheckoutBtn").mouseover(function() {
        $(this).attr("src", "/Images/Misc/express_checkout_downstate.gif");
    });

    $(".ExpressCheckoutBtn").mouseout(function() {
        $(this).attr("src", "/Images/Misc/express_checkout_upstate.gif");
    });

    //preload mouseover image
    if (document.images) {
        var express_checkout_downstate = new Image(100, 25);
        express_checkout_downstate.src = "/Images/Misc/express_checkout_downstate.gif";
    }

    //call to load the also bought control
    LoadAlsoBoughtControl();
});

//load the also bought control into the container div
function LoadAlsoBoughtControl() {
    $('#divAlsoBought').load('/Commerce/AlsoBought.aspx?pacb=OnAlsoBoughtPartAdded&fpcb=OnFindPartsClicked&cid=divAlsoBought', OnAlsoBoughtLoaded);
}

//also bought part added callback function
function OnAlsoBoughtPartAdded(e) {
    __doPostBack($("input[id=hdnBtnOnAlsoBoughtPartAdded]").val(), '');
}

//also bought find parts button clicked callback function
function OnFindPartsClicked(e) {
    location.href = $("a[id$=lnkFindMorePartsTop]").attr('href');    
}

//also bought control loaded callback function
var isAlsoBoughtLoadedOmnitureCalled = false;
function OnAlsoBoughtLoaded(e) {
    var isPartsSuggested;
    if (e == '') {
        $('#divAlsoBought').hide();
        isPartsSuggested = false;
    } else {
        $('#divAlsoBought').show();
        isPartsSuggested = true;
    }

    //call omniture if this is the first time the page is getting loaded.
    if (!isAlsoBoughtLoadedOmnitureCalled) {
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Services/Omniture.asmx/SetEvent_CartCheckoutStep0",
            data: '{isPartsSuggested: "' + isPartsSuggested + '"}',
            dataType: "json",
            success: GetOmnitureDataFromSession_Success,
            error: GetOmnitureDataFromSession_Fail
        });
        isAlsoBoughtLoadedOmnitureCalled = true;
    }
}

function EnterPromoKeypress(e) {
    if (e.keyCode == 13) {
        $("#aValidatePromoCode").click();
        return false;
    } else {
        return true;
    }
}

//validates the promotion code entered
function ValidatePromotion() {

    //hide the required field message
    $("#divPromoCodeRequired").hide();

    var promoCode = $("input[id$=txtPromoCode]").val()

    //TODO: find better way to catch watermark
    //checks required field validator
    if (promoCode == "" || promoCode == "Have a promo code?  Enter it here.") {
        $("#divPromoCodeRequired").show();
    }
    else {

        //call the web service to validate the part
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Services/Promotion.asmx/ValidatePromotion",
            data: '{promoCode: "' + promoCode + '"}',
            dataType: "json",
            success: ValidatePromotionSuccess,
            error: ValidatePromotionFailure
        });
    }
}

function ValidatePromotionSuccess(r) {

    if (r.d['IsAnonymous'] == true) {

        //show the login link
        $("a[id$=aAnonymousPromoLogin]").show();

        //hide select dealer button
        $("#divPromoSelectDealer").hide();

        //show error message
        $("#divPromoErrorMessage").text(r.d['Message']);

        //show message popup
        pcMessages.ShowWindowAtElement(pcMessages.GetWindowByName("pwPromoMessages"), this);
    }
    else if (r.d['HasDealer'] == false) {

        //hide the login link
        $("a[id$=aAnonymousPromoLogin]").hide();

        //show select dealer button
        $("#divPromoSelectDealer").show();

        //show error message
        $("#divPromoErrorMessage").text(r.d['Message']);

        //show message popup
        pcMessages.ShowWindowAtElement(pcMessages.GetWindowByName("pwPromoMessages"), this);

    }
    else if (r.d['IsValid'] == false) {
        //hide the login link
        $("a[id$=aAnonymousPromoLogin]").hide();

        //hide select dealer button
        $("#divPromoSelectDealer").hide();

        //show error message
        $("#divPromoErrorMessage").text(r.d['Message']);

        //show message popup
        pcMessages.ShowWindowAtElement(pcMessages.GetWindowByName("pwPromoMessages"), this);
    }
    else if (r.d['IsValid'] == true) {

        //do postback to apply promo code
        var btnSubmitPromoCodeSuccessUniqueID = $("input[id=hdnSubmitPromoCodeSuccessUniqueID]").val();
        __doPostBack(btnSubmitPromoCodeSuccessUniqueID, '')

    }
    else {
        //show message to the user
        PromotionInvalidDisplay();
    }
}

function ValidatePromotionFailure(r) {
    //show message to the user
    PromotionInvalidDisplay();
}

function PromotionInvalidDisplay() {
    //hide the login link
    $("a[id$=aAnonymousPromoLogin]").hide();

    //hide select dealer button
    $("#divPromoSelectDealer").hide();

    //show error message
    $("#divPromoErrorMessage").text("There was an error applying your promotion code.  Please try again.");

    //show message popup
    pcMessages.ShowWindowAtElement(pcMessages.GetWindowByName("pwPromoMessages"), this);

}

function ShowPromoErrorMessage(message) {
    //hide the login link
    $("a[id$=aAnonymousPromoLogin]").hide();

    //hide select dealer button
    $("#divPromoSelectDealer").hide();

    //show error message
    $("#divPromoErrorMessage").text(message);

    //show message popup
    pcMessages.ShowWindowAtElement(pcMessages.GetWindowByName("pwPromoMessages"), this);
}

function validatePromoCodeOnTextChange(textbox) {
    var rfvPromoCode = document.getElementById('ctl00_MainContent_rfvPromoCode'); //required field validator
    if (rfvPromoCode == null) return;

    if (textbox.value != "") {
        //Validator needs to be enabled to allow valid text change event to clear this message.
        ValidatorEnable(rfvPromoCode, true);
    } else {
        //Validator needs to be disabled to ignore tabbing off when the value is empty, we only want apply button click even to validate empty data.
        ValidatorEnable(rfvPromoCode, false);
    }
}

//Because we disable validation in a special use-case, we want to reset it on button click
function validatePromoCodeOnButtonClick() {
    var rfvPromoCode = document.getElementById('ctl00_MainContent_rfvPromoCode');
    if (rfvPromoCode == null) return;
    ValidatorEnable(rfvPromoCode, true);
}

//opens the clear cart dialog
function OpenClearCart() {
    ShowPopupWindow('pcCartTools', 'pwClearCart');
}

//clears the shopping cart
function ClearShoppingCart() {
    $("divClearCartError").hide();
    
    try {
        //call the web service to validate the part
        $.ajax({
            type: "POST",
            contentType: "application/json; charset=utf-8",
            url: "/Services/ShoppingCart.asmx/ClearShoppingCart",
            data: '{ }',
            dataType: "json",
            success: ClearShoppingCartSuccess,
            error: ClearShoppingCartFailure
        });
    } catch (e)
    { }
}

//the clearing of the cart was successful
function ClearShoppingCartSuccess(r) {
    HidePopupWindow('pcCartTools', 'pwClearCart');

    var btnSubmitPromoCodeSuccessUniqueID = $("input[id=btnClearCartConfirmSuccessUniqueID]").val();
    __doPostBack(btnSubmitPromoCodeSuccessUniqueID, '');
}

//the clearing of the cart failed
function ClearShoppingCartFailure(r) {
    $("#divClearCartError").show();
}
