/* 
*	UNOBTRUSIVE PROGRESSIVE ENHANCEMENT
*
* 	v2.3
* 
*/

var PROGRESSIVE_ENHANCE = true;
// called on page initialisation: do the progessive enhancement

$(document).ready(
    function() {
        if (PROGRESSIVE_ENHANCE) enhance();
    });

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);

function EndRequestHandler(sender, args) {
    if (args.get_error() == undefined) {
        afterAjax()
    }
}

// this function is called back after every ajax update
function afterAjax() {
    makeResultsInteractive();
    showPaging();
    skinCustomAfterAjax();
}

function enhance() {
    // always do...
    initAboutPlings();

    // enhancements by body tag id
    switch ($('body').attr('id')) {
        case "activity_page":
            break;
        case "discovery_page":
            makeResultsInteractive();
            enhanceWidgets();
            showPaging();
            break;
        case "location_page":
            makeResultsInteractive();
            showPaging();
            break;
    }

    // per-site progressive enhancement defined in /includes/skin/scripts/skin.js
    skinCustomEnhance($('body').attr('id'));
}

/* 
*	SHOW / HIDE PLINGS INFO BOX
*/

function initAboutPlings() {
    $('#aboutplings').hide();
    $('#logotag a').click(function() {
        $('#aboutplings').slideToggle(100);
        return true;
    });
}

function writeGMap(latitude, longitude, id) {
    if (GBrowserIsCompatible()) {
        var point = new GLatLng(latitude, longitude);
        var marker = new GMarker(point);
        var gmap = new GMap2(document.getElementById(id));
        gmap.addControl(new GSmallZoomControl());
        gmap.setCenter(point, 13);
        gmap.addOverlay(marker);
    }
}

/* 
*	ENHANCED FORM WIDGETS
*
* 	jquery port of http://lipidity.com/fancy-form/
* 
*/

function enhanceWidgets() {

    $("#when").addClass("enhanced");
    $("#where").addClass("enhanced");
    $("form").wireDropdown();
    $("form").cssRadio();
    $("form").cssCheckbox();
    dotNetVersionExtras();
}

jQuery.fn.wireDropdown = function() {
    $("select").change(function() {
        callFormSubmit($(this).attr("id"));
    });
}

jQuery.fn.cssRadio = function() {
    $("input[type='radio'] + label")
		.each(function() {
		    if ($(this).prev()[0].checked) {
		        $(this).addClass("selected");
		    } else {
		        $(this).addClass("unselected");
		    }
		})
		.hover(
			function() { $(this).addClass("over"); },
			function() { $(this).removeClass("over"); }
			)
    		.click(
    		    function() {
    		        $("input[type='radio'] + label").removeClass("selected").addClass("unselected").prev()[0].checked = 0;
    		        $(this).toggleClass("selected").toggleClass("unselected").prev()[0].checked = 1;
    		        callFormSubmit($(this).attr("for"));
    		        return false;
    		    })
    .prev().addClass("hideMe");
}

jQuery.fn.cssRadioSelect = function() {
    // unselect all
    $("input[type='radio'] + label").removeClass("selected").addClass("unselected").prev()[0].checked = 0;
    // select clicked
    $(this).addClass("selected").removeClass("unselected").prev()[0].checked = 1;
}

jQuery.fn.cssCheckbox = function() {
    $("input[type='checkbox'] + label")
		.each(function() {
		    if ($(this).prev()[0].checked) {
		        $(this).addClass("checked");
		    } else {
		        $(this).addClass("unchecked");
		    }
		})
		.hover(
		    function() { $(this).addClass("over"); },
		    function() { $(this).removeClass("over"); }
		    )
		.click(
		    function() {
		        $(this).toggleClass("checked").toggleClass("unchecked").prev()[0].checked = !$(this).prev()[0].checked;
		        callFormSubmit($(this).attr("for"));
		        // callFormSubmit("#where_event");
		        return false; // Important for Firefox!
		    })
		.prev().addClass("hideMe");
}

jQuery.fn.cssCheckboxToggle = function() {
    $(this).toggleClass("checked").toggleClass("unchecked").prev()[0].checked = !$(this).prev()[0].checked;
}

function addSelectAll() {
    $("#where").append("<div class='actions'><a href='#' id='unselect_all'>Unselect all</a> / <a href='#' id='select_all'>Select all</a></div>");
    $("#unselect_all").click(function(event) {
        jQuery("input[type='checkbox'] + label").each(
    function() {
        jQuery(this).prev()[0].checked = false;
        jQuery(this).removeClass("checked");
        jQuery(this).addClass("unchecked");
        callFormSubmit("ctl00_cphMain_cblWhere_0");
        return false;
    }
        );
        return false;
    });
    $("#select_all").click(function(event) {
        jQuery("input[type='checkbox'] + label").each(
    function() {
        jQuery(this).prev()[0].checked = true;
        jQuery(this).removeClass("unchecked");
        jQuery(this).addClass("checked");
        callFormSubmit("ctl00_cphMain_cblWhere_0");
        return false;
    }
        );
        return false;
    });
}

function showPaging() {
    $("#activity_nav").removeClass("hideMe");
    $("#noJSPager").addClass("hideMe");
    $("#activity_nav1").removeClass("hideMe");
    $("#noJSPager2").addClass("hideMe");
}

/* 
*
*	MISC PAGE ENHANCEMENTS
* 
*/

function makeResultsInteractive() {
    $(".more_details").hide();
    $(".activity")
	.mouseover(function() {
	    $(this).addClass("rolledover").children(".more_details").stop().show()
	})
	.mouseout(function() {
	    $(this).removeClass("rolledover").children(".more_details").stop().hide()
	})
}

function dotNetVersionExtras() {
    //$("#pager").removeClass("hideMe");
    //$("#below_activities").removeClass("hideMe");
    //$("#actions").removeClass("hideMe");
    $("#submit").addClass("hideMe");
}

/* 
*	AJAX WIDGET POSTBACKS
*
*  hook into .NET ajax framework for ajax request
* 
*/

function callFormSubmit(id) {
    var postback = '__doPostBack(\'' + id.replace(/_/g, '$') + '\',\'\')';
    setTimeout(postback, 0);
}
