﻿/* Functionality common to most, if not all, pages */
window.name = "WinMain"; //used instead of .opener property for popups to open URLs in the main window

function AdLoadFif(divId, fifSrc, easSrc, width, height, alignment) {
    var d = document,
    fif = d.createElement("iframe"),
    div = d.getElementById(divId);

    fif.src = fifSrc;
    fif.className = 'fif';
    fif.name = 'fif';
    fif.style.width = width + 'px';
    fif.style.height = height + 'px';
    fif.style.margin = "0px";
    fif.style.borderWidth = "0px";
    fif.style.padding = "0px";
    fif.AdAlign = alignment;
    fif.scrolling = "no";
    fif.frameBorder = "0";
    fif.allowTransparency = "true";
    fif.EAS_src = easSrc;
    div.appendChild(fif);
}

function SetUpConcertina(obj, options) {
	var sA = ['.concertinaButton', '.concertinaLink'];
	if ($.browser.msie6) { sA.push('.ie6_concertinaButton'); }
	$(obj).addClass('concertinaActivated');
	var selectors = sA.join(', ');
	if (options) {
		if (options.autoCollapse) {
			if (options.onChange) {
				$(selectors, obj).bind('click', function() { AutoCollapse.call(this, options); });
			}
			else { $(selectors, obj).bind('click', AutoCollapse); }
		}
		else {
			if (options.onChange) {
				$(selectors, obj).bind('click', function() { ExpandConcertina.call(this, options); });
			}
			else { $(selectors, obj).bind('click', ExpandConcertina); }
		}
	}
	else { $(selectors, obj).bind('click', ExpandConcertina); }
}

function photoCarousel_initCallback(carousel) { }


function AutoCollapse(options) {
	var parentObj = $(this).parents('li:eq(0)'), container = parentObj.parents('ul:eq(0)');
	if (!parentObj.hasClass('concertinaExpanded') && !parentObj.hasClass('concertinaExpandDefault')) {
		if (container.data("currentToggle")) {
			ToggleConcertina(container.data("currentToggle"));
		}
		else {
			ToggleConcertina(container.find(".concertinaExpandDefault:eq(0)"));
		}
		if (options && options.onChange) { options.onChange.call(this, false); }
	}
	container.data("currentToggle", ToggleConcertina(parentObj));
	if (options && options.onChange) { options.onChange.call(this, true); }
}

function SmoothScrollToTop(e) {
	if (!arguments.callee.inProgress) {
		var t = Math.floor($('#PageHeader').offset().top);
		if (Math.floor($(window).scrollTop()) !== t) {
			$('html, body').animate({ scrollTop: t }, 1000, 'swing', function() { delete window.SmoothScrollToTop.inProgress; });
			arguments.callee.inProgress = true;
		}
	}
	return false;
}


function SmoothScroll(e) {

    var obj = $($(this).attr("href"));
    var t = Math.floor(obj.offset().top);

    $('html, body').animate({ scrollTop: t }, 800, 'swing');

    return false;
}

function ToggleAlternativeSearches(e) {
	var obj = $(this);
	if (obj.hasClass('alternativeVisible')) {
		obj.removeClass('alternativeVisible');
		if ($.browser.msie) { $('#AlternativeSearches').hide(); }
		else { $('#AlternativeSearches').slideUp(500); }
	}
	else {
		obj.addClass('alternativeVisible');
		if ($.browser.msie) {
			$('#AlternativeSearches').show();
			if ($.browser.msie6) {
				$('.intro_content', '#AlternativeSearches').css({ height: '1%' });
			}
		}
		else { $('#AlternativeSearches').slideDown(500); }
	}
}

function ToggleConcertina(obj) {
	var objReturn = null;
	if (obj) {
		if (obj.hasClass('concertinaExpanded') || obj.hasClass('concertinaExpandDefault')) {
			if ($.browser.msie) {
				obj.removeClass('concertinaExpanded').find('.concertinaContent').hide();
			}
			else {
				obj.removeClass('concertinaExpanded').find('.concertinaContent').slideUp(500);
			}
		}
		else {
			objReturn = obj;
			if ($.browser.msie) {
				obj.addClass('concertinaExpanded').find('.concertinaContent').show();
			}
			else {
				obj.addClass('concertinaExpanded').find('.concertinaContent').slideDown(500);
			}
		}
		if ($.browser.msie) {
			ConcertinaReposition(obj, 'div.searchResultTable', $.browser.msie6);
		}
		obj.removeClass('concertinaExpandDefault');
	}
	return objReturn;
}

function ConcertinaReposition(obj, parStr, fixOuter) {
	function cb(i, v) {
		var $v = $(v);
		if (!$v.data('cb')) { $v.data('cb', $v.css('bottom')); }
		$v.css({ bottom: 'auto' }).css({ bottom: $v.data('cb') });
	}
	var parents = obj.parents(parStr);
	if (parents.length) {
		parents.find('.bl, .br, .myPlaces').each(cb);
		if ($.browser.msie6) {
			parents.find('div.agent, div.searchResultButtons').each(cb);
			if (fixOuter) {
				parents.parents('div.shadowBox').children('.bl, .br').each(cb);
			}
		}
	}
}

function ExpandConcertina(options) {
	var $this = $(this);
	if (typeof $this.data('wait') === 'undefined') {
		ToggleConcertina($this.parents('li:eq(0)'));
	}
	if (options && typeof options.onChange == "function") { options.onChange.call(this, true); }
}

(function ($) {
    $.extend($.fn, {
        concertina: function (options) {
            return $(this).each(function () { SetUpConcertina(this, options) });
        },

        setUpPhotoCarousel: function () {
            return $(this).jcarousel({ scroll: 5, initCallback: photoCarousel_initCallback });
        },

        registerLocationSVC: function (stype, sval, callback) {
            var obj = this;
            return $(this).keydown(function (e) { $(window).data('keypress', e); })
			.autocomplete('/svc/locationService.asmx/GetList', {
			    minChars: 2, delay: 250,
			    onItemSelect: function (li) { window.FAP.UI.onLocationSelected(li, obj, stype, sval, callback); },
			    formatItem: window.FAP.UI.formatLocation, selectFirst: false
			});
        },
        registerPostcodeSVC: function (options) {

            var opts = {
                minChars: 2, delay: 250,
                formatItem: window.FAP.UI.formatLocation, selectFirst: true, clingToInput: false
            };
            $.extend(opts, options);

            return this.keydown(function (e) { $(window).data('keypress', e); })
			        .autocomplete('/svc/locationService.asmx/GetPostcodeList', opts);
        },
        registerLocationAreaRegionOnlySVC: function (stype, sval, callback) {
            var obj = this;
            return $(this).keydown(function (e) { $(window).data('keypress', e); })
				.autocomplete('/svc/locationService.asmx/GetListAreaRegionOnly', {
				    minChars: 2, delay: 250,
				    onItemSelect: function (li) { window.FAP.UI.onLocationSelected(li, obj, stype, sval, callback); },
				    formatItem: window.FAP.UI.formatLocation, selectFirst: false
				});
        },

        registerAgentNameSVC: function (stype, sval) {
            var obj = this;
            return $(this).keydown(function (e) { $(window).data('keypress', e); })
			.autocomplete('/svc/agentDirectoryService.asmx/GetList', {
			    minChars: 3, delay: 250,
			    onItemSelect: function (li) { window.FAP.UI.onAgentSelected(li, obj, stype, sval); },
			    formatItem: window.FAP.UI.formatAgent, selectFirst: false
			});
        },
        YellAd: function (method) {

            var yellAdOptions = 'YellAd', dataName = 'defaultText';

            var methods = {
                getAds: function (url, loc, qry, cb) {
                    var container = this;

                    var max = 66, ads = container.find("div.ads"), data = container.data(yellAdOptions);

                    function error() {
                        ads.empty().append('<em style="color:#c00;">We have no sponsored listings that match your search query. <br />'
						+ 'For full business listings visit <br /><a href="http://www.yell.com/ucs/HomePageAction.do?cam=syndlink" rel="external" target="_blank"></a></em>');
                        return false;
                    }

                    function success(xml) {
                        var fields = ['description', 'display_url', 'url', 'title', 'beacon_url', 'category'], $this, result, results = [];
                        $(xml).find('ad').each(function () {
                            $this = $(this); result = {};
                            $.each(fields, function (i, v) {
                                var yv = 'y_' + v;
                                result[yv] = $this.find(v).text();
                                if (v !== 'url' && v !== 'beacon_url') {
                                    result[yv] = $.trim(result[yv].replace(/\s{2,}/g, ' '));
                                    if (result[yv].length > max) {
                                        var w = result[yv].split(' ');
                                        do { w.pop(); } while (w.join(' ').length > max);
                                        result[yv] = w.join(' ') + ' ...';
                                    }
                                }
                            });
                            results.push(result);
                        });
                        if (!results.length) { return error(); }
                        ads.empty();
                        $.each(results, function (i, v) {
                            var ad = $('<div />');
                            ad.append('<a>' + v.y_title + '</a> <br />')
							.append(v.y_description + ' <br />')
                            .append('<a><span>' + v.y_category + '</span></a>')
                            .append('<img scr="' + v.y_beacon_url + '" width="0" height="0" />')
							.find('a').attr({ href: v.y_url, rel: 'external', target: '_blank' });
                            if (i === results.length - 1) { ad.addClass('last'); }
                            ads.append(ad);
                        });

                        if (cb && typeof cb == "function") { cb.call(container, url, loc, qry); cb = null; }

                    }

                    if (!url || !url.length) { return error(); }

                    tempurl = methods.setTextBoxes.apply(this, arguments);
                    if (tempurl.length) { url = tempurl }


                    data.url = url;
                    $.ajax({
                        cache: false, data: { 'remoteUrl': url }, dataType: 'xml', type: 'POST',
                        url: '/svc/htmlservice.asmx/GetXmlFile', error: error, success: success
                    });


                    return false;

                },
                setTextBoxes: function (url, loc, qry) {
                    if (typeof qry === 'string') {
                        if (qry.length) { $('#' + this.attr("id") + 'What').val(qry).removeClass('grey'); }
                        if (url.indexOf('&cq=') === -1) { url += '&cq=' + qry; }
                        else { url = url.replace(/([?&]cq=)[^&]*/, '$1' + qry); }
                    }
                    if (typeof loc === 'string') {
                        if (loc.length) { $('#' + this.attr("id") + 'Where').val(loc).removeClass('grey'); }
                        url = url.replace(/([?&]loc=)[^&]*/, '$1' + loc);
                    }
                    return url;
                },
                init: function (options, url, loc, qry) {


                    var textFocusHandler = function (e) {
                        var $this = $(this);
                        $this.removeClass('grey');
                        if ($this.val() === $this.data(dataName)) { $this.val(''); }
                    };

                    var textBlurHandler = function (e) {

                        var $this = $(e.target), $val = $.trim($this.val()), $data = $this.data(dataName);
                        if (!$val.length) { $val = $data; $this.val($val); }
                        if ($val === $data) {
                            $this.addClass('grey');
                        }
                    }


                    function createClickHandler(container) {
                        return function () {
                            var data = $(container).data(yellAdOptions), $this = $(container),
                             val = $.map(data.dataValue, function (v, i) { var el = $('#' + container.id + v), $val = el.val(); return ($val === el.data(dataName)) ? '' : $val; });

                            return methods.getAds.apply($this, [data.url, val[1], val[0]]);

                        }
                    }

                    return this.each(function () {

                        var $this = $(this), data = $this.data(yellAdOptions);


                        if (!options) options = {};

                        if (!data) {
                            $this.data(yellAdOptions, {
                                dataValue: options.dataValue || ['What', 'Where'],
                                url: options.url || ''
                            })
                            data = $this.data(yellAdOptions);

                        }



                        var o = this, container = $(this),
                         submitClickHandler = createClickHandler(this);
                        $.each(data.dataValue, function (j, t) {

                            $('#' + o.id + t).data(dataName, t.toLowerCase())
                        });

                        container.find("input:text").focus(textFocusHandler).blur(textBlurHandler).blur().end()
                         .find('input.submit').click(submitClickHandler);

                        if (loc || qry) {
                            methods.setTextBoxes.apply(container, [url, loc, qry]);
                        }

                        submitClickHandler = null;
                        o = null;


                    });
                },
                copyOptions: function (obj) { obj.data(yellAdOptions, $.extend({}, this.data(yellAdOptions))); }
            }



            if (methods[method]) {
                return methods[method].apply(this, Array.prototype.slice.call(arguments, 1))
            }
            else if (typeof method === 'object' || !method) {

                return methods.init.apply(this, arguments);
            }
            else {

                return methods.init.call(this, null, arguments[0], arguments[1], arguments[2]);

            }
        },
        preventEdit: function (options) {
            var defaults = { copy: false, cut: false, paste: false, 'select': false };
            $.each(options, function (i, v) { if (typeof defaults[i] === 'undefined') { delete options[i]; } });
            options = $.extend(defaults, options);
            if (window.opera) {	// Opera only
                return this.each(function () {
                    if (/file|password|text(area)?/i.test(this.type)) {
                        $(this).bind('keypress', function (e) {
                            var p = false;
                            if (e.ctrlKey) {
                                switch (e.which) {
                                    case 65: p = options['select']; break; // A
                                    case 67: p = options.copy; break; 		// C
                                    case 86: p = options.paste; break; 		// V
                                    case 88: p = options.cut; break; 		// X
                                }
                                if (p) { e.preventDefault(); return false; }
                            }
                            return true;
                        });
                    }
                });
            }
            else {	// All other browsers
                var s = [];
                $.each(defaults, function (i, v) { if (v) { s.push(i); } });
                if (s.length) {
                    return this.each(function () {
                        if (/file|password|text(area)?/i.test(this.type)) {
                            $(this).bind(s.join(' '), function (e) { e.preventDefault(); });
                        }
                    });
                }
            }
        }
    });
    $.browser.msie6 = /*@cc_on@*//*@if(@_win32)(typeof document.documentElement.style.minWidth != 'string')@else@*/false/*@end@*/;
    $.browser.version = /*@cc_on@*//*@if(@_win32)(!$.browser.msie6 && parseInt($.browser.version, 10) == 6) ? '7.0' : /*@end@*/$.browser.version;
    $.browser.secure = ('https:' == document.location.protocol);

    $.extend(true, window, { FAP: {} });
    $.extend(true, window.FAP, {
        _loaded: true,
        UI: {
            concertinaOptions: {},
            openToolTip: function (obj, cb) {


                if (!(obj instanceof jQuery)) obj = $(obj);
                var self = this,
                handler = function CheckCallback(e) { self.closeToolTip.call(this, e, cb); }

                obj.addClass("showToolTip").bind("click.closer", handler);
                obj = null;
                handler = null;
                return false;
            },
            closeToolTip: function (e, cb) {

                if (e.target.className === "closer") {
                    $(this).unbind("click.closer").removeClass("showToolTip");


                    if (cb) {
                        cb.call(this);
                        cb = null;
                    }

                    if (e.target.tagName.toLowerCase() == "a") return false;
                }
            },
            addHoverToLink: function () {
                // cache a copy of the span, at the same time changing the opacity
                // to zero in preparation of the page being loaded
                var $span = $('> span.majorHover', this);

                if ($span.length == 0) { $span = $('<span class="majorHover"/>'); $(this).append($span); }
                $span.css('opacity', 0);
                // when the user hovers in and out of the anchor
                $(this).hover(window.FAP.UI.buttonMouseOver, window.FAP.UI.buttonMouseOut);
            },
            addHoverToButton: function () {
                var $input = $('> .majorButton', this).css('opacity', 0).addClass('majorHover');
                $(this).hover(window.FAP.UI.buttonMouseOver, window.FAP.UI.buttonMouseOut);
            },
            buttonMouseOver: function (e) { $('.majorHover', this).stop().fadeTo(500, 1); },
            buttonMouseOut: function (e) { $('.majorHover', this).stop().fadeTo(500, 0); },
            editorialMenuInit: function () {
                if ($.browser.msie6) {
                    $('li, #SpecialEditionLink', '#EditorialMenu').hover(function () { $(this).children('div.menuList').addClass('on'); }, function () { $(this).children('div.menuList').removeClass('on'); });
                }
            },
            fixStatuses: function () {
                if (!$.browser.msie6) { return false; }
                $('span.status').each(function (i, v) {
                    var $v = $(v), $i = $('img', $v).get(0), r = $i ? ($i.src.indexOf('1.png') !== -1) : false;
                    if (r) {
                        v.className = v.className.replace(/(status_)/, 'rent$1');
                        $v.removeClass('rent');
                    }
                    if ($i) { $i.src = $i.src.replace(/\.png$/, '.gif'); }
                });
            },
            toggleHidden: function (container, obj, hiddenObj, lock) {
                if (obj.length > 0) { //if quicksearch is on other than homepage there is no toggle link
                    var isBuyLink = (obj.hasClass("buy") || !obj.hasClass("rent"));

                    hiddenObj.addClass((isBuyLink) ? 'buy' : 'rent');
                    hiddenObj.removeClass(isBuyLink ? 'rent' : 'buy');
                }
                if (obj.hasClass("toggleOn")) {
                    container.data("currentToggle", null);
                    obj.removeClass("toggleOn");
                    if ($.browser.msie6) { hiddenObj.hide(); }
                    else { hiddenObj.slideUp(500); }
                    if (lock) { container.removeClass("locked"); }
                }
                else {
                    if (container.data("currentToggle")) { container.data("currentToggle").removeClass("toggleOn"); }
                    container.data("currentToggle", obj.addClass("toggleOn"));

                    if (!hiddenObj.is(":visible")) {
                        if ($.browser.msie6) { hiddenObj.show(); }
                        else { hiddenObj.slideDown(500); }
                        if (lock) { container.addClass('locked'); }
                    }
                }
            },
            inlineLabelFocus: function (e) {
                var prev = $(this).prev('label.inlined');
                if (this.value != '') { prev.addClass('has-text'); }
                else { prev.addClass('focus'); }
            },
            inlineLabelKeyPress: function () { $(this).prev("label.inlined").addClass("has-text").removeClass("focus"); },
            inlineLabelBlur: function () {
                if ($(this).val() == "") {
                    $(this).prev("label.inlined").removeClass("has-text focus");
                }
            },
            stopCarousel: function (carousel, where, state) {
                if (where) {
                    if (!carousel) {
                        carousel = where.find(".carousel:eq(0)").data("jcarousel");
                    }
                    if (carousel) {
                        if (!where.hasClass('concertinaExpanded') && !where.hasClass('concertinaExpandDefault')) {
                            if (state) { carousel.stopAuto(0); state = false; }
                        }
                        else {
                            if (!storyState) { carousel.startAuto(); state = true; }
                        }
                    }
                }
            },
            carousel_circleInitCallback: function (carousel) {
                // Disable autoscrolling if the user clicks the prev or next button.
                carousel.buttonNext.bind('click', function () { carousel.startAuto(0); });
                carousel.buttonPrev.bind('click', function () { carousel.startAuto(0); });

                // Pause autoscrolling if the user moves with the cursor over the clip.
                carousel.clip.hover(function () { carousel.stopAuto(); }, function () { carousel.startAuto(); });
            },
            onLocationSelected: function (li, loc, stype, sval, callback) {
                if (typeof window.FAP.form.resetResolvedFields == "function") {
                    window.FAP.form.resetResolvedFields();
                }
                if (li && li.extra) {
                    $(stype).val(li.extra[1]);
                    $(sval).val(li.extra[2]);
                    $(loc).val(li.extra[3]);
                }
                if (callback) { callback.apply(this, [li]); }
                return false;
            },
            onAgentSelected: function (li, obj, stype, sval, defaultButton) {
                if (li) {
                    $(stype).val(li);
                    $(sval).val(li);
                }
                var keyEvent = $(window).data("keypress");
                if (keyEvent) {
                    var keyCode = keyEvent.keyCode || keyEvent.which;
                    if (keyCode && keyCode == 13) {
                        defaultButton.click();
                    }
                }
            },
            formatLocation: function (row) { return (row[0] + ((row[1] != "") ? ", <i>" + row[1] + "</i>" : "")); },
            formatAgent: function (row) { return row[0] + "<br />"; },
            showEditions: function (e) {
                $(window).data("specialEditionMenu", $(e).siblings('.specialEditions:eq(0)'));
                $(window).data("specialEditionMenu").animate({ height: 'show' }, 500, function () {
                    if ($.browser.msie) { this.append('<span class="tl"></span><span class="tr"></span><span class="br"></span><span class="bl"></span>'); }
                    $(document).bind('keydown.editions', function (e) { if (e.keyCode == 27) { window.FAP.UI.hideEditions(); } }).bind('mousedown.editions', function (e) { var obj = e.target; if (obj == null) obj = e.srcElement; if ($(obj).parents().is(".specialEditions") || $(obj).is(".specialEditions") || $(obj).is("#SpecialEditionLink")) { e.preventDefault; } else { window.FAP.UI.hideEditions(); } });
                });
            },
            hideEditions: function () {
                var links = $(window).data("specialEditionMenu");
                if (links) {
                    links.find('.bl, .br, .tl, .tr').remove();
                    links.animate({ height: 'hide' }, 500, function () { $(document).unbind('keydown.editions').unbind('mousedown.editions'); });
                    $(window).data("specialEditionMenu", null);
                }
                //            },
                //            stationConcertina: function () {
                //                var $this = $(this);
                //                if ((typeof $this.data('stations') === 'undefined') && ($this.parents('div.stations').length === 1)) {
                //                    $this.css('cursor', 'wait');
                //                    var propId = parseInt($this.parents('div.searchResultContent').find('a')[0].id.replace(/\D/g, ''), 10);
                //                    $.ajax({
                //                        async: false, contentType: 'application/json; charset=utf-8', context: $this,
                //                        data: '{ "id": ' + propId + ' }', dataType: 'json', type: 'POST',
                //                        url: '/svc/locationService.asmx/GetStationsForProperty',
                //                        success: function (data) {
                //                            if (data.d || (data.d.length > 1)) {
                //                                data.d.shift(); // lose the first entry, we've already got it
                //                                var $content = $('<div class="concertinaContent" />');
                //                                $.each(data.d, function (i, v) {
                //                                    var $subcontent = $('<div />');
                //                                    $subcontent.append('<span class="place"><img alt="" src="' + v.icon + '" />' + v.name + '</span>');
                //                                    $subcontent.append('<span class="distance">' + v.miles.toFixed(2) + ' miles</span>');
                //                                    $content.append($subcontent).append('<br />');
                //                                });
                //                                $this.after($content);
                //                                ToggleConcertina($this.parents('li:eq(0)'));
                //                                $this.data('stations', data.d).removeData('wait').css('cursor', 'pointer');
                //                            }
                //                        }
                //                    });
                //                }
            },
            yellXML: function (url, loc, qry, cb) {
                $('#YellBannerAd').YellAd("getAds", url, loc, qry, cb);
            }

        },
        form: {
            initialValues: ['place or postcode', '£ min', '£ max'],
            jQueryInit: function () {
                if (!window.FAP._loaded) { window.setTimeout(window.FAP.form.jQueryInit, 5); return false; }
                if ($.browser.msie6) {
                    $('input.text, select, textarea').each(function (i) {
                        $(this).blur(function () { if ($.data(this, 'error') === true) { $(this).addClass('warning_field'); } $(this).removeClass('focus_field'); $.removeData(this, 'focused'); });
                        $(this).focus(function () { if ($(this).hasClass('warning_field')) { $.data(this, 'error', true); $(this).removeClass('warning_field'); } $(this).addClass('focus_field'); $.data(this, 'focused', true); });
                    });
                }
                $(".watermark").each(function (i) {
                    var obj = $(this); obj.data("previousVal", obj.val()).focus(function () {
                        var obj = $(this); // obj.removeClass('initialValue'); 
                        window.FAP.form.resetResolvedFields(); if (obj.val() == obj.data("previousVal")) { obj.val(""); }
                    })
					.blur(function () {
					    var obj = $(this); if ($.trim(obj.val()) == "") {
					        window.FAP.form.rollbackResolvedFields(); obj.val(obj.data("previousVal")); if ($.inArray(obj.data('previousVal'), window.FAP.form.initialValues) > -1) { //obj.addClass('initialValue'); 
					        }
					    }
					})
                    .change(function () {
                        var obj = $(this); if ($.trim(obj.val()) == "") {
                            window.FAP.form.rollbackResolvedFields(); obj.val(obj.data("previousVal")); if ($.inArray(obj.data('previousVal'), window.FAP.form.initialValues) > -1) { //obj.addClass('initialValue'); 
                            }
                        }
                    })
                });

            },
            resetResolvedFields: function () { $(".resolver").each(function (i) { var obj = $(this); if (this.tagName == "INPUT" && (this.type == "checkbox" || this.type == "radio")) { obj.data("previousVal", this.checked); this.checked = false; } else { obj.data("previousVal", obj.val()); obj.val(''); } }); },
            rollbackResolvedFields: function () { $(".resolver").each(function (i) { var obj = $(this); if (this.tagName == "INPUT" && (this.type == "checkbox" || this.type == "radio")) { this.checked = obj.data("previousVal"); } else { obj.val(obj.data("previousVal")); } }); },


            //Shows the login dropdown menu
            showLogin: function (obj) {

                var loginform = $('<div id="LoginMenu" class="infoPanel"><ol><li><label for="menuUser">Email</label><input type="text" id="menuUser" class="default_text" /></li><li><label for="menuPassword">Password</label><input type="password" autocomplete="off" id="menuPassword" class="default_text" /></li><li class="keep"><label for="menuKeepLoggedIn" >Keep me logged in</label><input type="checkbox" id="menuKeepLoggedIn" checked="checked"></li><li><a class="forgotPassword" href="' + forgottonPassword + '">Forgotten password? Click here</a></li></ol><div class="majorButtonOuter majorButtonContinue"><div class="majorButton" onclick="window.FAP.form.authenticate($(\'#menuUser\').val(),$(\'#menuPassword\').val(),$(\'#menuKeepLoggedIn\').prop(\'checked\'))"></div></div></div>').hide();

                loginform.find(":text,:password").keypress(function (e) { if (e.keyCode == 13) { $('#LoginMenu').find('.majorButton').click(); return false; } }).end().find(".majorButtonOuter").each(window.FAP.UI.addHoverToButton);
                var $obj = $(obj);
                var jObj = $obj.parent();
                if ($('#LoginMenu').length == 0) {
                    jObj.append(loginform);
                    loginform.animate({ width: 'show', height: 'show' }, 500, function () {
                        if ($.browser.msie) {
                            loginform.addClass('corneredBox').append('<span class="tl"></span><span class="tr"></span><span class="br"></span><span class="bl"></span>');
                        }
                        $obj.data("previousHtml", $obj.html()).html("Close");
                        $(document).bind('keydown.login', function (e) {
                            if (e.keyCode == 27) {

                                window.FAP.form.hideLogin(null);
                            }
                        }).bind('mousedown.login', function (e) {

                            var obj = e.target;
                            if (obj == null) obj = e.srcElement;
                            if ($(obj).parents().is("#LoginMenu") || $(obj).is("#LoginMenu")) {
                                e.preventDefault;
                            }
                            else {
                                window.FAP.form.hideLogin(null);
                            }
                        });
                    });
                }
                else {
                    this.hideLogin(obj);
                }
                return false;
            },
            //Hides the login dropdown menu
            hideLogin: function (obj) {
                var loginform = $('#LoginMenu');
                if (obj == null) obj = loginform.siblings('.loginLink');
                var $obj = $(obj);
                loginform.removeClass('corneredBox').find('.bl, .br, .tl, .tr').remove();
                loginform.animate({ height: 'hide', width: 'hide' }, 500, function () {
                    $obj.html($obj.data("previousHtml"));
                    loginform.remove();
                    $(document).unbind('keydown.login').unbind('mousedown.login');
                });

            },
            //Sends and authentication web request
            authenticate: function (username, password, keepLoggedIn) {
                if (username != '' && window.FAP.validators.validateEmail(username) && password != '') {

                    $.ajax({
                        type: 'POST',
                        url: '/svc/authenticationservice.asmx/Authenticate',
                        data: "{'username':'" + username + "', 'password': '" + password + "', 'keepLoggedIn':" + keepLoggedIn + "}",
                        contentType: 'application/json; charset=utf-8',
                        dataType: "json",
                        success: function (data) {
                            var o = eval("(" + ((data.d) ? data.d : data) + ")");

                            if (o.success == false) {
                                //TODO: modal the error message
                                alert(o.message);
                            }
                            else {
                                if (window.location.toString().split('?')[0].indexOf("login.aspx") > -1) {
                                    window.location = "/";
                                }
                                else {
                                    window.location.reload();
                                }
                            }
                        }
                    });
                }
                else {
                    alert('Please supply a valid username and password');
                }
                return false;
            },
            logout: function () {
                $.ajax({
                    type: 'POST',
                    url: '/svc/authenticationservice.asmx/Logout',
                    data: '{}',
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    success: function (data) {
                        window.location.reload();
                    }
                });
                return false;
            },
            cleanUpValue: function (obj) {
                $(obj).val($(obj).val().replace(/(<|(&gt;)|>|(&lt;))/g, ''));
            },
            isRadioGroupSelected: function (radioGroup) {
                return ($('input:radio[name=' + radioGroup + ']:checked').length !== 0);
            },
            getPageHeight: function () {
                var windowHeight
                if (self.innerHeight) {	// all except Explorer
                    windowHeight = self.innerHeight;
                } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
                    windowHeight = document.documentElement.clientHeight;
                } else if (document.body) { // other Explorers
                    windowHeight = document.body.clientHeight;
                }
                return windowHeight;
            },
            getWindowHeight: function () {
                // fix a jQuery/Opera bug with determining the window height
                var h = $.browser.opera && $.browser.version > "9.5" && $.fn.jquery <= "1.2.6" ? document.documentElement["clientHeight"] : $(window).height();

                return h;
            }
        },
        validators: {
            validateLocation: function (event, location, showAlert) {
                if (showAlert == null) showAlert = true;
                if ($.trim(location) == 'place or postcode' || $.trim(location) == '') {
                    if (showAlert) alert('Please supply a place name or postcode');
                    event.preventDefault();
                    return false;
                }
                else {
                    return true;
                }
            },
            validateEmail: function (email) {
                return /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/.test(email);
            },
            validatePhoneNumberIsNumbersOnly: function (sender, args) {
                for (i = 0; i < args.Value.length; i++) {
                    if ((isDigitOrSpace(args.Value.charAt(i)) == false) && (args.Value.charAt(i) != '+') && (args.Value.charAt(i) != '(') && (args.Value.charAt(i) != ')')) {
                        args.IsValid = false;
                        return;
                    }
                }
                args.IsValid = true;
                return;
            },
            validatorUpdateDisplay: function (val) {
                originalValidatorUpdateDisplay(val);
                if (val.controltovalidate) {

                    var obj = $('#' + val.controltovalidate);

                    if (typeof obj.data('validator_count') == 'undefined') {
                        obj.data('validator_count', 0)

                        $.each(Page_Validators, function () {
                            if (this.controltovalidate == val.controltovalidate) obj.data('validator_count', obj.data('validator_count') + 1);
                        });
                    }

                    if (typeof obj.data('validator_iteration') == 'undefined') {
                        obj.data('validator_iteration', 0);
                        obj.removeClass('warning_field');
                    }
                    else {
                        obj.data('validator_iteration', obj.data('validator_iteration') + 1);
                    }

                    if (val.isvalid) {
                        if (typeof obj.data('error') == 'undefined' || obj.data('error') != true) {
                            obj.removeClass('warning_field');
                        }
                    }
                    else {
                        obj.data('error', true);
                        obj.addClass('warning_field');
                    }

                    if (obj.data('validator_iteration') == obj.data('validator_count') - 1) {
                        //has completed going through validatiors - clear iterator
                        obj.removeData('validator_iteration');
                        obj.removeData('error');
                    }

                }

            },
            validatorUpdateDisplayWithPopup: function v(val) {

                var $val = $(val), obj = null;
                v.controlValidators = v.controlValidators || {};
                v.toolTip = v.toolTip || null;
                v.toolTipsShown = v.toolTipsShown || [];
                v.toolTipRaised = v.toolTipRaised || false;
                v.pauseToolTip = v.pauseToolTip || false;

                v.loopValidators = v.loopValidators || false;


                v.removeToolTip = function (removeFromArray, e) {


                    if (removeFromArray !== false) { removeFromArray = true; }
                    if (e) { v.loopValidators = false; }
                    if (v.toolTip != null) {

                        if (removeFromArray) {
                            if (v.toolTipsShown.length > 0) {
                                var idx = $.inArray(v.toolTip.get(0).id, v.toolTipsShown);
                                if (idx > -1) {
                                    v.toolTipsShown.splice(idx, 1);
                                }

                            }
                        }
                        v.toolTip.hide().empty();
                        v.toolTipRaised = false;
                    }


                };


                window.FAP.validators.validatorUpdateDisplayWithPopup.checkSummary = function f() {
                    v.pauseToolTip = false;

                    f.summaries = f.summaries || $('div.warning_summary');

                    function showSummary() {
                        f.summaries.text('Please check your form. Not all mandatory fields have been completed correctly').show();
                        v.removeToolTip();

                        v.toolTipRaised = false;
                        v.loopValidators = true;
                        findFirstToolTipToDisplay.summaryLoop = true;
                        findFirstToolTipToDisplay();
                    }
                    function hideSummary() {
                        v.loopValidators = false;
                        f.summaries.hide();
                    }

                    if (!Page_IsValid) {
                        showSummary();
                    }
                    else {
                        hideSummary();
                    }
                };

                function showToolTip() {
                    if (!v.pauseToolTip) {

                        // context should be the validator.
                        v.toolTip = $(this);
                        v.toolTip.show().append('<span class="tooltip">' + this.errormessage + '<span class="arrow"></span><span class="closer"></span></span>');
                        if ($.browser.msie && $.browser.version.substr(0, 1) < 7) {
                            var element = v.toolTip.find(".tooltip");
                            element.append(
                                    $("<iframe />")
                                   .height(element.height() + 22)
                                  .width(element.width() + 22)
                                 )//.css("left", v.toolTip.offset().left - 1)

                        }
                        window.FAP.UI.openToolTip(v.toolTip, removeToolTipAndShowNext);

                        if ($.inArray(this.id, v.toolTipsShown) === -1) {

                            v.toolTipsShown.push(this.id);
                        }
                        v.toolTipRaised = true;
                    }
                }

                function checkAndRemoveToolTip(id) {
                    var result = false;
                    if (v.toolTip) {

                        if (id == v.toolTip[0].id) {
                            result = true;
                            v.removeToolTip();

                        }


                    }
                    return result;
                }
                function removeToolTipAndShowNext() {

                    // todo: override this so that it doesn't loop until after submit click.
                    if (v.loopValidators === true) {
                        v.removeToolTip(false);
                        findFirstToolTipToDisplay();
                    }
                    else {
                        v.removeToolTip();
                    }
                }
                function findFirstToolTipIterator(c) {

                    //this = the validator (er, this is a dom element)
                    var idx = $.inArray(this.id, v.toolTipsShown)

                    if (!v.toolTipRaised) {

                        if (!this.isvalid) //&& () === -1)
                        {

                            if (idx === -1) {

                                findFirstToolTipToDisplay.sliceIndex = Math.abs(findFirstToolTipToDisplay.validatorLength - c) - 1;

                                // what if sliceIndex becomes greater than validator length?
                                showToolTip.call(this); return false;
                            }
                        }
                        else if (this.isvalid) {


                            if (idx > -1) { v.toolTipsShown.splice(idx, 1); }
                        }
                    }
                    else if (v.toolTipRaised) {
                        return false;
                    }
                }

                function findFirstToolTipToDisplay() {


                    findFirstToolTipToDisplay.sliceIndex = findFirstToolTipToDisplay.sliceIndex || ((window.Page_Validators) ? Page_Validators.length : 0);
                    findFirstToolTipToDisplay.validatorLength = findFirstToolTipToDisplay.validatorLength || findFirstToolTipToDisplay.sliceIndex;

                    if (window.Page_Validators) {

                        var idx = findFirstToolTipToDisplay.validatorLength - findFirstToolTipToDisplay.sliceIndex;
                        findFirstToolTipToDisplay.summaryLoop = findFirstToolTipToDisplay.summaryLoop || v.pauseToolTip;

                        if (findFirstToolTipToDisplay.summaryLoop == false && idx == 0) {
                            v.loopValidators = false;
                        }
                        else {

                            $.each((idx == 0) ? Page_Validators : Page_Validators.slice(idx), findFirstToolTipIterator);


                            findFirstToolTipToDisplay.summaryLoop = false;


                        }


                    }
                }


                if ($val.closest(".validators").length > 0) {
                    //this is the new method, else go to old method.
                    v.lastValidator = v.lastValidator || null;


                    if (!val.controltovalidate) {
                        //no control to validate - leave popup to custom validator?
                        v.displayShouldUpdate = true;
                        obj = $val.closest("tr,div")
                    }
                    else {
                        // cache the first validator per control to validate
                        if (!v.controlValidators[val.controltovalidate]) {

                            v.controlValidators[val.controltovalidate] = { id: val.id, obj: $val.closest("tr,div") };
                            v.displayShouldUpdate = true;
                            v.lastValidator = null;
                        }
                        else {
                            if (v.controlValidators[val.controltovalidate].id == val.id) {
                                //we should be at the begining of a group of validators
                                if (v.lastValidator) {
                                    if (v.lastValidator.controltovalidate === val.controltroltovalidate) {

                                        v.lastValidator = null;
                                        v.displayShouldUpdate = true;

                                    }
                                } else { v.displayShouldUpdate = true; }
                            }
                        }
                        obj = v.controlValidators[val.controltovalidate].obj;

                        if (v.lastValidator != null) {

                            if (v.lastValidator.controltovalidate === val.controltovalidate) {
                                //validators are validating the same
                                if (val.controltovalidate) {
                                    v.obj = v.obj || $('#' + val.controltovalidate).closest("tr,div");
                                    v.displayShouldUpdate = v.lastValidator.isvalid;

                                }
                            }
                            else {
                                v.lastValidator = null;
                                v.displayShouldUpdate = true;
                                if (val.controltovalidate) {
                                    obj = $('#' + val.controltovalidate).closest("tr,div");
                                }

                            }
                        }
                    }

                    if (val.isvalid) {

                        if (v.displayShouldUpdate == true) {

                            obj.removeClass('warning_field');


                        }
                        else {


                            if (v.lastValidator != null && v.lastValidator.id == val.id) {

                                v.lastValidator = null;
                                obj.removeClass('warning_field');

                            }
                            else if (v.lastValidator == null) {

                                obj.removeClass('warning_field');


                            }



                        }
                        if (checkAndRemoveToolTip(val.id)) {
                            //findFirstToolTipToDisplay();
                        }

                    }
                    else {

                        var errIcon = obj.addClass('warning_field').find("span.errorIcon");
                        if (errIcon.length > 0) {

                            errIcon.attr("title", val.errormessage)
                            .unbind("click.validator")
                            .bind("click.validator", (function (id, cb) { return function (e) { cb(false, e); ValidatorValidate(id); id = null; cb = null; } })(val, v.removeToolTip));
                        }

                        if (!v.toolTipRaised) {

                            showToolTip.call(val);
                        }
                        else {

                            //  Redo tooltip in situations where validator can do multiple error messages
                            //   if (checkAndRemoveToolTip(val.id)) {
                            v.removeToolTip();
                            showToolTip.call(val);
                            //}
                        }
                        v.displayShouldUpdate = false;
                        v.lastValidator = val;
                    }
                }
                else {
                    window.FAP.validators.validatorUpdateDisplay(val);
                }



                val = null;

            },
            validateQuickSearch: {
                validateMin: function (sender, args) {
                    var minPrice = $("input[id$=minprice]")
                    var minVal = minPrice.val().replace(",", "");
                    var maxPrice = $("input[id$=maxprice]");
                    var maxVal = maxPrice.val().replace(",", "");
                    if (isNaN(minVal)) {
                        args.IsValid = false;
                        minPrice.addClass('warning_field');
                        sender.errormessage = "Please enter numbers only for your minimum budget.";
                        return;
                    } else if (minVal < 0) {
                        args.IsValid = false;
                        minPrice.addClass('warning_field');
                        sender.errormessage = "Please enter a positive number for your minimum budget.";
                        return;
                    } else {
                        minPrice.removeClass('warning_field');
                        if (!isNaN(maxVal)) {
                            if (maxVal >= 0) {
                                maxPrice.removeClass('warning_field');
                            }
                        }
                    }
                },
                validateMax: function (sender, args) {
                    var minPrice = $("input[id$=minprice]")
                    var minVal = minPrice.val().replace(",", "");
                    var maxPrice = $("input[id$=maxprice]");
                    var maxVal = maxPrice.val().replace(",", "");
                    if (isNaN(maxVal)) {
                        args.IsValid = false;
                        maxPrice.addClass('warning_field');
                        sender.errormessage = "Please enter numbers only for your maximum budget.";
                        return;
                    }
                    else if (maxVal < 0) {
                        args.IsValid = false;
                        maxPrice.addClass('warning_field');
                        sender.errormessage = "Please enter a positive number for your maximum budget.";
                        return;
                    } else {
                        maxPrice.removeClass('warning_field');
                        if (!isNaN(minVal)) {
                            if (minVal >= 0) {
                                minPrice.removeClass('warning_field');
                            }
                        }
                    }
                },
                validateMinLargerMax: function (sender, args) {
                    var minPrice = $("input[id$=minprice]"), maxPrice = $("input[id$=maxprice]");
                    var minVal = minPrice.val().replace(",", ""), maxVal = maxPrice.val().replace(",", "");

                    if ((parseFloat(minVal) > parseFloat(maxVal)) && (maxPrice.val() != "") && args.IsValid) { //Only test this if both are numeric
                        maxPrice.addClass('warning_field');
                        minPrice.addClass('warning_field');
                        args.IsValid = false;
                        sender.errormessage = "Please check your maximum budget - it has to be a value greater than your minimum budget";
                        minPrice.focus();
                        return;
                    };

                },
                validateLocation: function (sender, args) {
                    var loc = $('input[id$=loc]');
                    if ($.trim(loc.val()) == 'place or postcode' || $.trim(loc.val()) == '') {
                        loc.addClass('warning_field');
                        sender.errormessage = "Please supply a place name or postcode";
                        args.IsValid = false;
                        return;
                    }
                    loc.removeClass('warning_field'); return;
                }
            },
            validateAgentSelections: function validateAgentSelections(obj, args) {
                var validationField = $('#' + this.getValidationFieldId(obj));
                var isValid = validationField.find('input:checked').length > 0;
                args.IsValid = isValid;
            },
            validateCheckboxList: function (obj, args) {
                args.IsValid = args.CheckboxGroup ? ($('input:checkbox[id*=' + args.CheckboxGroup + ']:checked').length !== 0) : true;
            },
            validateRadioList: function (obj, args) {
                args.IsValid = args.RadioGroup ? ($('input:radio[name=' + args.RadioGroup + ']:checked').length !== 0) : true;
            },
            getValidationFieldId: function (obj) {
                return obj.className.match(/data-validator-([^\s]*)/)[1];
            }

        },
        shortlist: {
            //not used yet!
            saveproperty: function (id, link) {
                $.ajax({ type: 'POST', url: '/svc/shortlistservice.asmx/SaveProperty',
                    data: "{'propertyId':'" + id + "'}",
                    contentType: 'application/json; charset=utf-8',
                    success: function (data) {
                        result = data.d || data;
                        if (result != 0) {
                            var jContainer = $(link).parent();
                            jContainer.empty();
                            jContainer.html('<span class="myFAP_SavedProperty" title="This property is already in your shortlist">saved</span>')
                            $('.myFAP_SavedPropertyCount').html(result + ' saved propert' + (result === 1 ? 'y' : 'ies'));
                        }
                        else {
                            alert("Maximum number of saved properties reached. Please login to save more properties");
                        }
                    }
                });
                return true;
            },
            //not used (pl)
            savesearch: function (q, f) {
                $.ajax({ type: 'POST', url: '/svc/shortlistservice.asmx/SaveSearchAsAlert',
                    data: "{'nameValuePairs':'" + q + "','frequency':" + f + "}",
                    contentType: 'application/json; charset=utf-8',
                    success: function (data) {
                        alert('Saved');
                    }
                });
                return true;
            }
        },
        tooltips: {
            getmorestations: function (id) {
                $.ajax({ type: 'POST', url: '/svc/htmlservice.asmx/SaveProperty',
                    data: "{'propertyId':'" + id + "'}",
                    contentType: 'application/json; charset=utf-8',
                    success: function (data) {

                    }
                });
                return false;
            }
        }
    });
    window.FUI = window.FAP.UI; // shorthand
} (jQuery));

function IE6PngFix() {
	function fixBg(a) {
		$.each(a, function(i, v) {
			$(v).css('behavior', 'url(/content/scripts/iepngfix.htc)');
		});
	}
	if (!$.browser.msie6) { return; }
	var sA = ['.searchResultContent', 'body[id!=RootPage] .majorButtonOuter', '.myPlaces', '.myPlacesCont', 'div.ie6_concertinaButton',
	'#AreaDetailsPage .infoPanel .tr', '#tdpg-uservoice-feedback-tab a', '.userNotes_AddNoteLink',
	'.userNotes_EditNoteLink', '.userNotes_noteContent', '#noteActions a', '.nav_paging'];
	fixBg(sA);
	fixBg($('img').filter(function(i) {
		return ((/\.png$/.test(this.src)) && ($(this).parents('div.google_map').length === 0));
	}));
}

var originalValidatorUpdateDisplay = null;
var ValidationSummaryOnSubmitOrig = null;
function AssignValidatorUpdateDisplay() {

    originalValidatorUpdateDisplay = null;
    if (typeof (ValidatorUpdateDisplay) == 'function') {
        originalValidatorUpdateDisplay = ValidatorUpdateDisplay;
		ValidatorUpdateDisplay = window.FAP.validators.validatorUpdateDisplayWithPopup;
    }

    ValidationSummaryOnSubmitOrig = null;
    if (typeof (ValidationSummaryOnSubmit) == 'function') {
        ValidationSummaryOnSubmitOrig = ValidationSummaryOnSubmit;
        ValidationSummaryOnSubmit = function () {
            var scrollToOrig = window.scrollTo;
            window.scrollTo = function () { };
            ValidationSummaryOnSubmitOrig();
            window.scrollTo = scrollToOrig;
        };
    }
}



function resetValidation() {
	$("[id*='Validator']").css('display', 'none');
	$('input').removeClass('warning_field');
}


function CheckAdsExist(selector) {

	var addisplay = false;
	var object = $(selector);
	object.find(".bannerads").each(function () {

		var obj = $(this);

		if (obj.find("object").length > 0 || obj.find("embed").length > 0 ||
            obj.find("iframe").length > 0) {
			obj.addClass("show_advert");
			addisplay = true;
		}
		else {
			var imageList = obj.find("img");

			if (imageList.length > 0) {
				var img = imageList.get(0);
				if (img != null) {

					if (img.src == "http://iad.anm.co.uk/house/1x1.gif" ||
                             img.src == "http://iad.anm.co.uk/anmdefaultad.gif" || img.height < 3) {

						this.style.display = "none";

					}
					else {
						obj.addClass("show_advert");
						addisplay = true;

					}

				}
			}

		}
	});

	if (addisplay != false) {
		if (object.hasClass("hideAds")) { object.removeClass("hideAds"); }
		else {
			object.find(".hideAds").removeClass("hideAds");
		}
		object.addClass("showAdContainer");
	}

	return addisplay;

}

function BannerAdsExist(noOfAds, objId) {
	CheckAdsExist('#groupads');
}


function ClickToReveal(obj, AgentId) {
	// $.ajax({ type: "POST", url: "/svc/UserNotesService.asmx/SaveUserNote", data: "{'AgentId': '" + UserAccountId + "'}", contentType: "application/json; charset=utf-8", dataType: "json" });
	obj.className = "show clickToReveal";

}

function GetPageScroll() {
	var xScroll, yScroll;
	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
		xScroll = self.pageXOffset;
	} else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
		xScroll = document.documentElement.scrollLeft;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
		xScroll = document.body.scrollLeft;
	}

	return new Array(xScroll, yScroll)
}

var OverrideCheckAds;
OverrideCheckAds = CheckAdsExist;


function popup(theURL, theWindowName, theWidth, theHeight) {
	window.open(theURL, theWindowName, "width=" + theWidth + ",height=" + theHeight + ",scrollbars=no");
	//put 'window.self.focus' in html header of popup page
	//instead of win.focus(); here to avoid an error in Internet Explorer
}

function OpenPopupWindow(winurl, winname, winfeatures) {
	newwin = window.open(winurl, winname, winfeatures);
}


function PopupPrintWindow(url) {
	var pwin = window.open(url, "printwin", "height=700,width=790,resizable=yes,scrollbars=yes,menubar=yes,status=yes");
	if (navigator.appName.substring(0, 8) == "Netscape")
		pwin.location = url
	pwin.focus();
}


function redirectTo(page) {
	window.location.href = page;
}

function ViewMorePhotos(e) {
	var obj = e.target;
	if (obj.tagName == 'LI' || obj.tagName == 'UL') return;
	if (obj.tagName != 'A') { obj = $(obj).parents('a')[0]; }
	var image = new Image();
	// Wire up mainImage onload event
	image.onload = function() {
		prepModalDialog();
		$('#UFrame1').append(image);
		showModalCover();
		setModalDimensions();
		modalVisible = true;
	};
	image.src = obj.href;
	return false;
}
function ToggleClicks(e) {

    function ChangeToggleImage(obj) {
        return obj.attr("src", (obj[0].src.search('plus') > -1) ? obj[0].src.replace('plus', 'minus') : obj[0].src.replace('minus', 'plus'));
    }

    var obj = $(e.target), cache = obj.parents('.simple_menu:eq(0)')
    if (obj.hasClass("click")) {
        if (!obj.hasClass("isCached")) {

            if (cache.data("currentImage")) {
                cache.data("currentToggle").slideToggle();
                ChangeToggleImage(cache.data("currentImage").removeClass("isCached"));
            }
            cache.data("currentToggle", obj.siblings(".toggle").slideToggle());
            cache.data("currentImage", ChangeToggleImage(obj).addClass('isCached'));
        }
        else {
            // collapse (dont need to cache a collapse)
            obj.removeClass('isCached');
            obj.siblings(".toggle").slideToggle();
            ChangeToggleImage(obj);
            cache.data("currentImage", null);
            cache.data("currentToggle", null);
        }
    }
}
function overArea() { }
function outArea() { }

function isDigitOrSpace(num) {
    if (num.length > 1) { return false; }
    var string = "1234567890 +()";
    if (string.indexOf(num) != -1) { return true; }
    return false;
}
