$(document).ready(init);


function init() {
	
    /////////////////////////////////////////
    //START REGISTER CONTROL EVENT HANDLERS//
    /////////////////////////////////////////
    
    updateBrokerDetailDivVisibility();
    updateCellphoneDivVisibility();
    updateAddressDivVisibility();
    $(".chkResidentialBroker").live("click", function() {
        updateBrokerDetailDivVisibility();
    });
    $(".chkCommercialBroker").live("click", function() {
        updateBrokerDetailDivVisibility();
    });
    $(".chkSmsReminders").live("click", function() {
        updateCellphoneDivVisibility();
    });
    $(".chkMonthlyAuctionCatalogue").live("click", function() {
        updateAddressDivVisibility();
    });

    $(".aRegister").live("click", function() {
        //perform client-side validation
        var validationPassed = true;
        validationPassed &= validateRequiredTextBox("txtFirstName", "First name");
        validationPassed &= validateRequiredTextBox("txtSurname", "Surname");
        validationPassed &= validateRegisterEmail();
        if (registerControlRegisterMode || $(".txtPassword").val().length != 0 || $(".txtConfirmPassword").val().length != 0) {
            validationPassed &= validateRequiredPasswordBox("txtPassword", "Password");
            validationPassed &= validateRequiredPasswordBox("txtConfirmPassword", "Password confirmation");
            validationPassed &= validatePasswordMatchesConfirmation();
        }
        if ($(".chkResidentialBroker > input:checkbox").is(':checked') || $(".chkCommercialBroker > input:checkbox").is(':checked')) {
            validationPassed &= validateRequiredTextBox("txtBrokerCompany", "Company");
        }
        if ($(".chkSmsReminders > input:checkbox").is(':checked')) {
            validationPassed &= validateRequiredTextBox("txtCellphone", "Cellphone number");
        }
        if ($(".chkEmailAlerts > input:checkbox").is(':checked') || $(".chkSmsReminders > input:checkbox").is(':checked')) {
            validationPassed &= validateRequiredDdl("ddlCommunictaionFrequency");
        }
        else {
            $(".ddlCommunictaionFrequency").removeClass(errorClassName);
        }
        if ($(".chkMonthlyAuctionCatalogue > input:checkbox").is(':checked')) {
            validationPassed &= validateRequiredTextBox("txtAddress", "Address");
        }

        //trigger postback
        if (validationPassed) {
	   $(".btnRegister:first").click();
        }
    });

    ///////////////////////////////////////
    //END REGISTER CONTROL EVENT HANDLERS//
    ///////////////////////////////////////

    ///////////////////////////////////
    //START LOGIN FORM EVENT HANDLERS//
    ///////////////////////////////////

//    $(".loginField").live("keypress", function(event) {
//        //alert("a");
//        if (event.keyCode == '13') {
//            //alert("b");
//            eval($(".loginButton").attr("href").substring("javascript:".length));
//        }
//    });

    /////////////////////////////////
    //END LOGIN FORM EVENT HANDLERS//
    /////////////////////////////////

    ///////////////////////////////////////////
    //START EVENT REGISTRATION MODAL HANDLERS//
    ///////////////////////////////////////////

	$(".btnEventRegisterSubmit").live('click', function() {
		$(".btnEventRegisterSubmit").hide();
		$(".imgEventRegisterSpinner").show(); 
	});
    
    /////////////////////////////////////////
    //END EVENT REGISTRATION MODAL HANDLERS//
    /////////////////////////////////////////
	
    var searchResultsCount = Math.ceil($('.slider li').length / 2);

	
    var propertySliderCount = $(".propertyHolder li").length;
    $(".propertyHolder").css('width', $("#indexPropertySlider").width() * propertySliderCount);


    var assetSliderCount = $("#gallerySlider a").length / 4;

    function initiateSlider(count) {
        $("#gallerySlider").css('width', ($("#gallerySliderWrapper").width() * count + (count * 10)));
        createPageNumbers(count, 0)
    }

    initiateSlider(assetSliderCount)

    $("#gallerySlider a:last").attr("style", "margin:0;");
    $(".closeButton").live("click", function() { hideModal() });
    $(".cardButtonRedCloseButton").live("click", function() { hideModal() });
    //$("#greyCoverAll").live("click", function() { hideModal() });

    //
    $("a.cardButton").bind("click", function() {
        showModal($(this).attr("modalId"));
    });

    $(".contentPageTabContent").css("display", "none");
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
	$(".valueDropDown").live("change", function() {
		adminLoader();
	});
	$(".adminSection .contentPageTabLinks a, .nextAdminPage, .adminLoadingAni").live("click",function() {//, .adminLoadingAni //add this for more button loading animations
		if($(this).hasClass("disabled")){
		} else {
			adminLoader();
		}
	});
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    $(".contentRightColumn div:first-child").css("display", "block");
    $(".contentPageTabLinks a:first").addClass("selected");
    $(".contentPageTabLinks a").bind("click", contentPageTabChange)

    function contentPageTabChange() {
        $(".contentPageTabLinks a.selected").removeClass("selected");
        $(this).addClass("selected");
        $(".contentPageTabContent").fadeOut("slow", tabFadeIn);
        var newTab = $(this).attr("name")
        function tabFadeIn() {
            $("#" + newTab).fadeIn("slow");
        }
    }



	

    function hideModal() {
        $("#greyCoverAll").hide();
        $(".modal").hide();
    }

    $("td.tab a").bind("click", clicker)

    $("#moreFeatures").bind("click", function() {
        $('.hiddenFeatures').slideToggle();
    });

    $("#moreAdditionalInfo").bind("click", function() {
        $('.hiddenAdditionalInfo').slideToggle();
    });

    $(".panelShow").live("click", function() {
        $("div.hiddenPanel2").hide();
        $('.password-clear').show();
        $('.password-password').hide();
        $(this).next("div.hiddenPanel").slideToggle();
    });

    $(".panelShow2").live("click",function() {
        $(this).next("div.hiddenPanel2").slideToggle();
    });

    $("#definitionList dt").hover(function() {
        $(this).next().css("background", "#f6f8fa");
    }, function() {
        $(this).next().css("background", "none");
    });

    $("#definitionList dd").hover(function() {
        $(this).css("background", "#f6f8fa");
    }, function() {
        $(this).css("background", "none");
    });

    $("#faqList li").hover(function() {
        $(this).css("backgroundColor", "#f6f8fa");
    }, function() {
        $(this).css("backgroundColor", "transparent");
    });

    $("#faqList li").click(function() {
        $(this).find("p").not(".notme").slideToggle();
    });

    $("#faqList li").find("p").not(".notme").hide();
    $("#faqList li").find("p").not(".notme").css("marginTop", "5px");

    $(".expand").click(function() {
        $(this).siblings("p").slideToggle();
    });

    $(".contactInfo.right").click(function() {
        showModal("mapModal")
    });


    //handles text field default values
    $(".swaptextbox.error").live("focus", function() { $(this).val("").removeClass("error") })
    $(".password-clear.error").live("focus", function() {
        $(this).val($(this).attr("title"));
        $(this).removeClass("error")
    });

    $(".swaptextbox").live("focus", function() {
        if ($(this).val() == $(this)[0].title) {
            $(this).val("");
        }
    });

    $(".swaptextbox").live("blur", function() {
        if ($(this).val() == "") {
            $(this).val($(this)[0].title);
        }
    });

    //$(".swaptextbox").val("");
    $('.password-clear').focus();
    $('.password-password').blur();
    $(".swaptextbox").blur();

    //
    $('.password-clear').show();
    $('.password-password').hide();

//$("form").submit(function(){ extendSlider(0)});

    $('.password-clear').live("focus", function() {
        $(this).hide();
        $(this).removeClass("error");
        //$(this).val($(this).attr("title"));
        $(this).next('.password-password').show();
        $(this).next('.password-password').focus();
    });
    $('.password-password').live("blur", function() {
        if ($(this).val() == '') {
            $(this).prev('.password-clear').show();

            $(this).hide();
        }
    });

    $(".nextPreviousResults").hide();

    if (searchResultsCount > 1) {
        createPageNumbers(searchResultsCount, 0)

        $('.slider').css('width', searchResultsCount * $('.sliderWrapper').width() + ((($('.slider li').length / 2) - 1) * 20));
    }


    $(".number").hover(
		  function() {
		      $(this).addClass("activeNumber");
		  },
		  function() {
		      $(this).removeClass("activeNumber");
		  }
    );

    var marginsSearch = 0;

    $('.number').live("click", function() {
        marginsSearch = 0 - $(this).attr('id') * $('.sliderWrapper').width() - ($(this).attr('id') * 20)
        $('.slider').animate({ marginLeft: marginsSearch }, 1000);
        $('.number').removeClass('current');
        $(this).addClass("current");
        if (marginsSearch <= 0 - $('.slider').width() + $(".sliderWrapper").width()) {
            $("#nextResults").addClass("disabled");
        } else {
            $("#nextResults").removeClass("disabled");
        }
        if (marginsSearch >= 0) {
            $("#previousResults").addClass("disabled");
        } else {
            $("#previousResults").removeClass("disabled");

        }
    });


    $('.card').hover(
	function() {
	    //$(this).css('backgroundColor','#f6f8fa')
	},
	function() {
	    //$(this).css('backgroundColor','#fff')
	});

    var margins = 0;





    $("#gallerySlider a").bind("click", galleryClick);

    function galleryClick() {
        $(".mainImage").fadeOut("slow", theImageFadeIn);
        var newImage = $(this).attr("name")
        function theImageFadeIn() {
            $(".mainImage").attr("src", newImage);
            $(".mainImage").fadeIn("slow");
        }

    }


    if (propertySliderCount > 1) {
        $(".nextPrevious").show();
        $("#previous").addClass("disabled");
    }

    $(".nextPreviousAsset").show();


    $("#previousAsset").addClass("disabled");
    $("#previousResults").addClass("disabled");
    $("#previous").addClass("disabled");

    $(".nextPrevious").live("click", function() { slider(this, "#indexPropertySlider", ".propertyHolder", "disabled", "#next", "#previous", 0) });

    $(".nextPreviousAsset").live("click", function() {
        $("#gallerySlider").css('width', ($("#gallerySliderWrapper").width() * assetSliderCount + (assetSliderCount * 10)) - 10);
        $("#gallerySlider a:last").attr("style", "margin:0;");
        slider(this, "#gallerySliderWrapper", "#gallerySlider", "disabled", "#nextAsset", "#previousAsset", 10);

    })

    $(".nextPreviousResults").live("click", function() { slider(this, ".sliderWrapper", ".slider", "disabled", "#nextResults", "#previousResults", 20) })

    function slider(eventInitiator, parentElement, sliderElement, disabled, next, previous, offset) {



        var sliderWidth = $(sliderElement).width();
        var parentWidth = $(parentElement).width();

        var slider = $(sliderElement);

        var marginOffset = offset;

        var nextButton = $(next);
        var previousButton = $(previous);
        var leftMargin = slider.margin().left

        if ($(eventInitiator).attr("id") == nextButton.attr("id")) {
            if (leftMargin <= 0 - sliderWidth + parentWidth) {
                //do nothing
            } else {
                if (!slider.is(":animated")) {
                    previousButton.removeClass(disabled);
                    leftMargin = leftMargin - parentWidth - marginOffset;
                    if (leftMargin <= 0 - sliderWidth + parentWidth) {
                        nextButton.addClass(disabled);
                    }

                    slider.animate({ marginLeft: leftMargin }, 1000);
                    $('.number.current').removeClass('current').next().addClass("current");
                }

            }
        } else {
            if (leftMargin >= 0) {
                //do nothing
            } else {
                if (!slider.is(":animated")) {

                    nextButton.removeClass(disabled);
                    var spek = leftMargin + parentWidth + marginOffset;
                    leftMargin = spek;
                    if (leftMargin >= 0) {
                        previousButton.addClass(disabled);
                    }
                    slider.animate({ marginLeft: leftMargin }, 1000);
                    $('.number.current').removeClass('current').prev().addClass("current");
                }

            }
        }
    } /*slider functions*/


    $("table, td, tr, th, tbody, table a").attr("style", "");
    $("table a").click(function() { $("table, td, tr, th, tbody, table a").attr("style", ""); });


	if (window.location.hash.length > 3) {
    		showTab(window.location.hash);
	} else if (window.location.hash.length > 1) {
		var theNumber = window.location.hash.replace("#","");

		$(".number:nth-child("+theNumber +")").click();

	}
	
}

function hideModal() {
    $("#greyCoverAll").hide();
    $(".modal").hide();
}

function showModal(modalID, dontWaitForCallback) {

    if (modalID) {
        var pageSize = getPageSize();
        $("#greyCoverAll").css("opacity", 0.3)
        $("#greyCoverAll").width(pageSize[0]);
        $("#greyCoverAll").height(pageSize[1]);
        $("#greyCoverAll").show();
        var modal = $("#" + modalID);
        if (modal.attr("showCallBackId")) {
            $("#" + modal.attr("showCallBackId")).val("showModalReady('" + modalID + "')");
            if (modal.attr("hideCallBackId")) {
                $("#" + modal.attr("hideCallBackId")).val("hideModalReady('" + modalID + "')");
            }
            if (dontWaitForCallback) {
                showModalReady(modalID);
            }
        } else {
            modal.show();
        }
    }
}

function showTab(tabId) {

    if (tabId.length > 1) {

        $(".contentPageTabContent").hide();
        $(tabId).show();
        $(".contentPageTabLinks a").each(function() {
            var newTab = $(this).attr("name")

            var linkId = tabId.replace("#", "");

            if (newTab == linkId) {
                $(".contentPageTabLinks a.selected").removeClass("selected");
                $(this).addClass("selected");
            }
        });
    }
}


function requestModal(modalID) {
    showModal(modalID, true);
}

function showModalReady(modalID) {
    $("#" + modalID).show();
    $(".closeButton").bind("click", function() { hideModal() });
    $(".cardButtonRedCloseButton").bind("click", function() { hideModal() });



    $('.password-password').blur();
    $(".swaptextbox").blur();

    initSlider();
    extendSlider(1);
}

function hideModalReady(modalID) {
    $("#greyCoverAll").hide();
    $("#" + modalID).hide();
}

function clicker() {

    var content_show = null;
    $(".indexTabs td.active").removeClass("active");
    $(this).parent().addClass("active");
    $(".tabContent").fadeOut("fast", theFadeOut)


    content_show = $(this).attr("name");





    function theFadeOut() {
        if (content_show != null) {


            if (content_show == "map") {
                $("#" + content_show).fadeIn('fast', mapRecreate);
            } else if (content_show.length > 1) {
                $("#" + content_show).fadeIn('fast');
            } else {
                $(".tabContent").before("<img src='/images/loadingAnimation.gif' width='32' height='32' style='position:absolute;margin:150px 0 0 215px;z-index:999;' />")
            }
        }
    }
}


function adminLoader() {

$("#greyCoverAll").css("opacity", 0.7)
$("#greyCoverAll").css("backgroundColor", "#ffffff")
$("#greyCoverAll").show();
$("#loadingAnimation").show();

modalGreyResize();

//$("#greyCoverAll").after("<img id="loadingAnimation" src='/images/transparent_preloader.gif' width='32' height='32' style='position:absolute;margin:-16px 0 0 -16px;top:50%;left:50%;z-index:999;' />")

}

function hideAdminLoader() {

	$("#loadingAnimation").hide();
	$("#greyCoverAll").hide();

}


function extendSlider(count) {
    var propertySliderCount = $(".propertyHolder li").length;
    $(".propertyHolder").css('width', $("#indexPropertySlider").width() * propertySliderCount);
    if (propertySliderCount > 1) {
        $(".nextPrevious").show();
        $("#previous").addClass("disabled");
    }


    //$(".nextPrevious").click(function() { slider(this, "#indexPropertySlider", ".propertyHolder", "disabled", "#next", "#previous", 0) });
}

function mapRecreate() {

    var coords = [];

    $("#map input").each(function() {
        coords.push($(this).val());
    });

    var map = new GMap2(document.getElementById('mappydiv'));
    var longditude = coords[0];
    var latitude = coords[1];
    var mapCenterVar = new GLatLng(latitude, longditude);
    map.setCenter(mapCenterVar, 12);
    var marker = new GMarker(mapCenterVar);
    map.addOverlay(marker);
    map.addControl(new GSmallMapControl());
}


function initSlider() {
    var searchResultsCount = Math.ceil($('.slider li').length / 2);

    if (searchResultsCount > 1) {
        createPageNumbers(searchResultsCount, 0)
        $('.slider').css('width', searchResultsCount * $('.sliderWrapper').width() + ((($('.slider li').length / 2) - 1) * 20));
    }
}

function createPageNumbers(pageCount, offset) {
    $('.numbers').show();
    $(".nextPreviousResults").show();
    $('.numbers').html("&nbsp;")
    for (var number = 0; number < pageCount; number++) {
        var revNumber = number + 1 + offset;
        if (revNumber == 1) {
            $('.numbers').append("<span class='number current' id='" + number + "'>" + revNumber + "</span>");
        } else {
            $('.numbers').append("<span class='number' id='" + number + "'>" + revNumber + "</span>");
        }
    }
}

$(document).resize(modalGreyResize);

function modalGreyResize() {

    if ($("#greyCoverAll").is(":hidden") == true) {
        return;
    }

    var pageSize = getPageSize();

    $("#greyCoverAll").width(pageSize[0]);
    $("#greyCoverAll").height(pageSize[1]);
}


function getPageSize() {
    var xScroll, yScroll;
    if (window.innerHeight && window.scrollMaxY) {
        xScroll = window.innerWidth + window.scrollMaxX;
        yScroll = window.innerHeight + window.scrollMaxY;
    } else if (document.body.scrollHeight > document.body.offsetHeight) { // all but Explorer Mac
        xScroll = document.body.scrollWidth;
        yScroll = document.body.scrollHeight;
    } else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
        xScroll = document.body.offsetWidth;
        yScroll = document.body.offsetHeight;
    }
    var windowWidth, windowHeight;
    if (self.innerHeight) {	// all except Explorer
        if (document.documentElement.clientWidth) {
            windowWidth = document.documentElement.clientWidth;
        } else {
            windowWidth = self.innerWidth;
        }
        windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
        windowWidth = document.documentElement.clientWidth;
        windowHeight = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
        windowWidth = document.body.clientWidth;
        windowHeight = document.body.clientHeight;
    }
    // for small pages with total height less then height of the viewport
    if (yScroll < windowHeight) {
        pageHeight = windowHeight;
    } else {
        pageHeight = yScroll;
    }
    // for small pages with total width less then width of the viewport
    if (xScroll < windowWidth) {
        pageWidth = xScroll;
    } else {
        pageWidth = windowWidth;
    }
    arrayPageSize = new Array(pageWidth, pageHeight, windowWidth, windowHeight);
    return arrayPageSize;
};


function videoPlayer(container, width, height, videourl, playerurl, primary, secondary, tertiary) {

    //colour defaults
    if (primary == null) {
        primary = "0x003c6e"
    }
    if (secondary == null) {
        secondary = "0x4c7699"
    }
    if (tertiary == null) {
        tertiary = "0xb2c4d3"
    }

    var flashvars = {
        videoURL: videourl,
        vWidth: width,
        vHeight: height,
        primaryColour: primary,
        secondaryColour: secondary,
        tertiaryColour: tertiary
    }

	var params = {
	quality: "high",
	allowFullScreen: "true",
	wmode: "window"
};




    swfobject.embedSWF(playerurl, container, width, height, "9.0.124", "expressInstall.swf", flashvars, params);
}

//////////////////////////////////
//START REGISTER CONTROL HELPERS//	
//////////////////////////////////

function updateBrokerDetailDivVisibility() {
    if ($(".chkResidentialBroker > input:checkbox").is(':checked') || $(".chkCommercialBroker > input:checkbox").is(':checked')) {
        $("#divBrokerDetail").slideDown();
    }
    else {
        $("#divBrokerDetail").slideUp();
    }
}

function updateCellphoneDivVisibility() {
    if ($(".chkSmsReminders > input:checkbox").is(':checked')) {
        $("#divCellphone").slideDown();
    }
    else {
        $("#divCellphone").slideUp();
    }
}
function updateAddressDivVisibility() {
    if ($(".chkMonthlyAuctionCatalogue > input:checkbox").is(':checked')) {
        $("#divAddress").slideDown();
    }
    else {
        $("#divAddress").slideUp();
    }
}

var errorClassName = "error";

function validateRequiredTextBox(cssClass, friendlyName) {
    var selector = "." + cssClass;
    if ($(selector).val() == $(selector).attr("title") || $(selector).hasClass(errorClassName)) {
        $(selector).val(friendlyName + " is required.");
        $(selector).addClass(errorClassName);
        return false;
    }
    else {
        return true;
    }
}

function validateRequiredPasswordBox(cssClass, friendlyName) {
    var selector = "." + cssClass;
    if ($(selector).val().length == 0 || $(selector).prev(".password-clear").hasClass(errorClassName)) {
        $(selector).hide();
        $(selector).prev(".password-clear").val(friendlyName + " is required.");
        $(selector).prev(".password-clear").addClass(errorClassName);
        $(selector).prev(".password-clear").show();
        return false;
    }
    else {
        return true;
    }
}

function validateRegisterEmail() {
    var selector = ".txtEmail";

    if ($(selector).val().match(new RegExp("^[^\\s@]+@[^\\s@.]+\\.[^\\s@\\.]+[^\\s@]*$"))) { //check for general email address pattern
        if (registerControlRegisterMode) { //check for prohibited domain
            var validationPassed = true;
            for (var i in registerControlProhibitedDomains) {
                validationPassed &= !$(selector).val().match(new RegExp(".*@" + registerControlProhibitedDomains[i]));
            }
            if (validationPassed) {
                return true;
            }
            else {
                $(selector).val("Prohibited domain.");
                $(selector).addClass(errorClassName);
                return false;
            }
        }
        else {
            return true;
        }
    }
    else {
        $(selector).val("Email address is invalid.");
        $(selector).addClass(errorClassName);
        return false;
    }
}

function validateRequiredDdl(cssClass) {
    ddlTitleItemValue = -1;
    var selector = "." + cssClass;
    if ($(selector).val() == ddlTitleItemValue) {
        $(selector).addClass(errorClassName);
        return false;
    }
    else {
        return true;
    }
}

function validatePasswordMatchesConfirmation() {
    var confirmationSelector = ".txtConfirmPassword";
    if ($(".txtPassword").val() == $(confirmationSelector).val()) {
        return true;
    }
    else {
        $(confirmationSelector).hide();
        $(confirmationSelector).prev(".password-clear").val("Password and confirmation do not match.");
        $(confirmationSelector).prev(".password-clear").addClass(errorClassName);
        $(confirmationSelector).prev(".password-clear").show();
        return false;
    }
}

////////////////////////////////
//END REGISTER CONTROL HELPERS//	
////////////////////////////////