/* $Id: global.js,v 1.7 2008/07/09 16:54:00 jplotkin Exp $ */  
//For nav - probably will change/delete

//////////////////////////////////////////////////////////////////////////
// Find the location of the main nav tab for proper placement of the dropdown
//////////////////////////////////////////////////////////////////////////
function findPos(obj) {
	obj = document.getElementById(obj);
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		}
	}
	return [curleft,curtop];
}
//////////////////////////////////////////////////////////////////////////
// Close all of th emain nav drop downs
//////////////////////////////////////////////////////////////////////////
function closeAll() {
 $('music_menu').style.display = "none";
 $('sports_menu').style.display = "none";
 $('arts_menu').style.display = "none";
 $('family_menu').style.display = "none";
 $('especiales_menu').style.display = "none";
}
//////////////////////////////////////////////////////////////////////////
// Open a main nav dropdown
//////////////////////////////////////////////////////////////////////////
function menu( cat, effect, delay ) {
if (1){
    if (typeof(effect_queue) != 'undefined'){ clearTimeout(effect_queue); };
    menu_name = cat + '_menu';
    myEffect = effect;
    timeDelay = delay;
    // The dropdown menu is a little wonky.  If you just show the div using "$(menu_name).show()" the menu flashes as you roll over the listed items
    // If you use the 'display: "inherit"' below, it fixes it.  I have run out of time to figure out why.
    // Note:  the function call should also be updated at that point
    // Note; the functions findPos(obj) & closeAll() 
//var elem = $(menu_name);
//elem.style.display = "block";
//    $(menu_name).setStyle({display: "inherit"});
//    $(menu_name).show();
    $(menu_name).setStyle({display: "block"});
    var coord = $(cat).cumulativeOffset();
    var h_space = coord[0];
    var v_space = coord[1] + $(cat).getHeight();
    $(menu_name).setStyle({top: v_space+'px', left: h_space+'px'});
    $(cat).addClassName('hover');
    // Keeping the unsued condition for when I have time to figure out why we HAVE to use 'display: "inherit"' to make this work
    if (effect == "show_menu"){
        //if (typeof(effect_queue) != 'undefined'){ clearTimeout(effect_queue); };
        //(function() { $(menu_name).show() }).delay(1);
        //
        // var id = Element.hide.delay(15, 'foo');
        // window.clearTimeout(id);
        //
        //effect_queue = self.setTimeout( '$(menu_name).show()', timeDelay );
        //$(menu_name).setStyle({display: "inherit"});
        //$(menu_name).show()

    }else if(effect == "hide_menu"){
        $(cat).removeClassName('hover');
        $(menu_name).hide();
    }
    // Keeping the unsued condition for when I have time to figure out why we HAVE to use 'display: "inherit"' to make this work
}else if (0){
    menu_name = cat + '_menu';
    myEffect = effect;
    timeDelay = delay;
    var coord = $(cat).cumulativeOffset();
    var h_space = coord[0];
    var v_space = coord[1] + $(cat).getHeight();
    $(menu_name).setStyle({top: v_space+'px', left: h_space+'px'});
    if (effect == "show_menu"){
        //if (typeof(effect_queue) != 'undefined'){ clearTimeout(effect_queue); };
        //effect_queue = self.setTimeout( '$(menu_name).show()', timeDelay );
        $(menu_name).show();
    }else if(effect == "hide_menu"){
        $(menu_name).hide();
    }
}else{
    // Keeping the unsued condition for when I have time to figure out why we HAVE to use 'display: "inherit"' to make this work
    closeAll();
    var name = cat + '_menu';
    var elem = $(name);
    elem.style.display = "inherit";
    var hite = Element.getHeight(cat);
    var coord = findPos(cat);
    var v_space = coord[1] + hite;
    elem.style.top = v_space + "px";
    elem.style.left = coord[0] + "px";
}         
//var queue = Effect.Queues.get('topnavscope');
//queue.each(function(e) { e.cancel() });
//    runEffect();
}         
//////////////////////////////////////////////////////////////////////////
// Apply a scriptaculous effect to the main nav dorp down 
// (Currently unused, due to side effect of "Flashing" and JS breaking
// when too many are rolled over)
//////////////////////////////////////////////////////////////////////////
function runEffect() {
    switch( myEffect ) {
        case "appear":
            new Effect.Appear( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "fade":
            new Effect.Fade( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "puff":
            new Effect.Puff( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "blind_down":
            new Effect.BlindDown( $(menu_name), {queue: {position: 'end', scope: 'topnavscope', limit:2}, delay: timeDelay} );
        break;
        case "blind_up":
            new Effect.BlindUp( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "switch_off":
            new Effect.SwitchOff( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "slide_down":
            new Effect.SlideDown( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "slide_up":
            new Effect.SlideUp( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "drop_out":
            new Effect.DropOut( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "shake":
            new Effect.Shake( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "pulsate":
            new Effect.Pulsate( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "squish":
            new Effect.Squish( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "fold":
            new Effect.Fold( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "grow":
            new Effect.Grow( $(menu_name), {direction: 'top-left', queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "shrink":
            new Effect.Shrink( $(menu_name), {direction: 'top-left', queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "highlight":
            new Effect.Highlight( $(menu_name), {queue: {position: 'end', scope: 'topnavscope'}, delay: timeDelay} );
        break;
        case "show":
            $( $(menu_name) ).show();
        break;
        default:
        	$('music_menu','sports_menu','arts_menu','family_menu').invoke('hide');
        break;
    }
}
//////////////////////////////////////////////////////////////////////////
// USed FOR "CHANGE LOCATION" BOX AND LEFT NAV 
//////////////////////////////////////////////////////////////////////////
function toggleA(box_id,input_id){
    var box = $(box_id);
    var input = $(input_id);

    if( input.visible() ) {
        box.className = 'more';
        input.hide();
    }
    else {
        box.className = 'less';
        input.show();
    }
}
//////////////////////////////////////////////////////////////////////////
// Ren's Script for Browse Box dropdowns
//////////////////////////////////////////////////////////////////////////
function setHidden(field_name, field_value, field_select){
    // Hide the error text, if previously displayed
    $('browse_error_us_national_90_days').hide();
    $('date_range_too_large').hide();
    // Test for form error
    if (browse_us_national && (field_value == "n93") && (($('browse_area').value == "") || ($('browse_area').value == browse_area_default_text))){
        $('browse_error_us_national_90_days').show();
    }

    // If the being clicked is either major or minor category, then the hidden var is called "category"
    if ((field_name == 'minor_cat') || (field_name == 'major_cat')){
        $("category").value = field_value;
        if (field_name == 'major_cat'){
            if (((current_domain == 'au') || (current_domain == 'nz')) && (field_value == 8)) {
                $('root').value = 10004;
            }else{
                $('root').value = field_value;
            }
            $('minor_cat_dropdown').update();
        }
    }else {
        $(field_name).value=field_value;
    }

    // Do not try to reset the simulated input field for the range dates
    if ((field_name != 'rdc_smonth') &&
        (field_name != 'rdc_sday') &&
        (field_name != 'rdc_syear') &&
        (field_name != 'rdc_emonth') &&
        (field_name != 'rdc_eday') &&
        (field_name != 'rdc_eyear')){
            $(field_name + '_title').update(decodeURIComponent(field_select));
            $(field_name + '_dropdown').hide();
    }

    //console.log($(field_name).value);
}
//////////////////////////////////////////////////////////////////////////
// Build the Minor Category dropdown based on selecting a major cat
//////////////////////////////////////////////////////////////////////////
function build_minor_cat_dropdown(major_cat_id){
    title_span = eval('minor_cat_title_span_' + major_cat_id);

    $('minor_cat_title').update(title_span);
    $('minor_cat_title').removeClassName('off');
    $('minor_cat_dropdown').removeClassName('off');
//    rentest = 'alert(" dean")';
//    Element.writeAttribute('minor_cat_title', {'onclick': rentest});
//    Element.writeAttribute('minor_cat_title', {'onClick': 'alert(" me")'});
//    $('minor_cat_title').writeAttribute('onClick', '$("minor_cat_dropdown").toggle()');

// This has been moved to the "DropMenu" class
//    $('minor_cat_title').onclick = new Function('$("minor_cat_dropdown").toggle()');
    for( k in genres[major_cat_id] ) {
        var min_cat_anchor = new Element('a', { title: genres[major_cat_id][k].replace("&#39;","'"),
                                                href: httpServer
                                            }
                                        );
    $(min_cat_anchor).onclick = new Function("setHidden('minor_cat', '" + k + "', '" + genres[major_cat_id][k] + "'); return false;");
    $(min_cat_anchor).update( genres[major_cat_id][k] );
        $('minor_cat_dropdown').appendChild( min_cat_anchor );
    }
}
//////////////////////////////////////////////////////////////////////////
// Change Location JS for Top Nav 
//////////////////////////////////////////////////////////////////////////
function verifyLocationString(form) {
    $('location_eror_blank','location_eror_multiple','location_eror_multiple_dropdown','location_eror_not_found').invoke('hide');
    if( $F('location_input').strip().empty() || $F('location_input') == location_text ){
        $('location_eror_blank').show();
        $('location_eror_multiple').hide();
        $('location_eror_multiple_dropdown').hide();
        $('location_eror_not_found').hide();
        $('location_input').focus();
        $F('location_input').value = location_text;
        return false;
    } else {
        $(form).request({
            parameters: { uri: page_context_uri, use_json: 1 },
            onSuccess: function(t) {
                var loc_data = t.responseText.evalJSON();
                if( loc_data.redirect == 1 ) {
                    self.location.href = loc_data.location;
                }
                else if( loc_data.count > 1 ) {
                    $('location_multiple_dropdown').childElements().invoke('remove');
                    $('location_results').update( $F('location_input') );
                    $('location_eror_multiple').show();
                    buildMulti( loc_data );
                    $('location_eror_multiple_dropdown').show();
                }
                else {
                    $('location_eror_blank').hide();
                    $('location_eror_multiple').hide();
                    $('location_eror_multiple_dropdown').hide();
                    $('location_eror_not_found').show();
                }
            },
            onFailure: function(t) {
            }
        });
        return false;
    }
}
//////////////////////////////////////////////////////////////////////////
// Location Module - Builds the faux select box of found cities
//////////////////////////////////////////////////////////////////////////
function buildMulti( theData, theType ) {
    var to_insert;
    var tm_link = theData.tm_link;
    if( theType == 'browse' ) {
        to_insert = 'browse_location_multiple_dropdown';
    }
    else {
        to_insert = 'location_multiple_dropdown';
    }
    theData.countries.each(
        function( c ) {
            if( c != theData.countries.first() ) {
                var dv = new Element('div', {'className': 'locDivide'} ).update( theData.country[c] );
                Element.insert($(to_insert), dv);
            }
            theData.dmas[c].sortBy( function( dma ) { return dma.desc; } ).each(
                function( dma ) {
                    var a_link;
                    if( theType == 'browse' ) {
                        a_link = new Element('a', { title: dma.desc, href: '/' }).update( dma.desc );
                        $(a_link).onclick = new Function( 'browse_loadDMA("' + dma.desc + '", ' + dma.dma + '); return false;' );
                    }
                    else {
                        a_link = new Element('a', { title: dma.desc, href: '/change_area?uri=' + page_context_uri + '&dma=' + dma.dma + '&desc=' + encodeURI(dma.desc) + '&tm_link=' + tm_link }).update( dma.desc );
                    }
                    Element.insert($(to_insert), a_link);
                }
            );
        }
    );
}
//////////////////////////////////////////////////////////////////////////
// updates fields upon selection from city faux-select box
//////////////////////////////////////////////////////////////////////////
function browse_loadDMA( theDesc, theID ) {
    $('browse_area').value = theDesc;
    $('browse_location_eror_multiple_dropdown').hide();
    $('browse_location_eror_multiple').hide();
    $('browse_go_button').disable();
    $('browse_go_button').className = 'go_wait';
    new Ajax.Request('/change_area', {
        method: 'get',
        parameters: { dma: theID },
        onSuccess: function(t) {
            multiSelect = true;
            $('browse_go_button').enable();
            $('browse_go_button').className = 'go';
        },
        onFailure: function(t) {
            multiSelect = false;
            $('browse_go_button').enable();
            $('browse_go_button').className = 'go';
        }
    } );
    if( $('rdc_select') && $('rdc_select').value != 'range' ) {
        $('calendar_from_input').disable().setStyle({backgroundColor: '#ffffff'});
        $('calendar_to_input').disable().setStyle({backgroundColor: '#ffffff'});
    }
    if( $('rdc_select') && $('rdc_select').value == 'range' ) {
        $('rdc_select').remove();
    }
}

function convertDate( date_from, date_to ) {
    if( Object.isElement($(date_from)) && Object.isElement($(date_to)) ) {
        calendar_from_input_str = $(date_from).value;
        calendar_to_input_str = $(date_to).value;

        if (date_string_format == '%d/%m/%Y'){
            date_separater = date_string_format.substr(2,1);
            calendar_from_input_str = calendar_from_input_str.split(date_separater);
            calendar_from_input_str = calendar_from_input_str[1] + date_separater + calendar_from_input_str[0] + date_separater + calendar_from_input_str[2];
            calendar_to_input_str = calendar_to_input_str.split(date_separater);
            calendar_to_input_str = calendar_to_input_str[1] + date_separater + calendar_to_input_str[0] + date_separater + calendar_to_input_str[2];
        }
        return true;
    }
    else {
        return false;
    }
}

//////////////////////////////////////////////////////////////////////////
// Misc form preprocessing and validation before submit
//////////////////////////////////////////////////////////////////////////
function preProcessBrowse() {
    $('browse_go_button').disable();
    $('browse_go_button').className = 'go_wait';

    // First we hide all errors
    $$('.error.padV5.txt11.lh13').invoke('hide');
    if( $('browse_location_eror_multiple_dropdown') ) {
        $('browse_location_eror_multiple_dropdown').hide();
    }

    // If we have no category error out right away
    if( $('category').value == "NULL" ){
        $('major_cat_missing').show();
        $('browse_go_button').enable();
        $('browse_go_button').className = 'go';
        return false;
    }
    if( browse_us_national && ($('rdc_select').value == "n93") && (($('browse_area').value == "") || ($('browse_area').value == browse_area_default_text)) ) {
        $('browse_error_us_national_90_days').show();
        $('browse_go_button').enable();
        $('browse_go_button').className = 'go';
        return false;
    }
    if( ($('rdc_select') && $('rdc_select').value == 'range') || $('type').value == 'range' ) {
        // Re-enable the form fields just in case
        $('rdc_smonth','rdc_sday','rdc_syear','rdc_emonth','rdc_eday','rdc_eyear').invoke('enable');
        // We convert date formats to the one we want
        var date_check = convertDate( $('calendar_from_input'), $('calendar_to_input') );
        if( !date_check ) {
            alert("Calendar input field are blank");
            $('browse_go_button').enable();
            $('browse_go_button').className = 'go';
            return false;
        }
        // We check for a date range that is too long
        if( $D(calendar_to_input_str).diff(calendar_from_input_str, 'days') > 60 && current_domain == 'us' ) {
            $('date_range_too_large').show();
            $('browse_go_button').enable();
            $('browse_go_button').className = 'go';
            return false;
        }
        else {
            // Since we are ranged we have to set the type parameter
            $('type').value = 'range';
            // We also have to disable of the rdc_select input
            if( $('rdc_select') ) {
                $('rdc_select').disable();
            }
            // Since we are ranged we also need the teVal parameter for some reason
            if( !Object.isElement($('teVal')) ) {
                var teval_field = new Element('input', { type: "hidden", name: "teVal", id: "teVal" });
                $('ccs_form').appendChild( teval_field );
            }
            // We set up the values in the form now and get ready to submit
            $('rdc_smonth').value   = $D(calendar_from_input_str).getMonthNumber();
            $('rdc_sday').value     = $D(calendar_from_input_str).getDate();
            $('rdc_syear').value    = $D(calendar_from_input_str).getFullYear();
            $('rdc_emonth').value   = $D(calendar_to_input_str).getMonthNumber();
            $('rdc_eday').value     = $D(calendar_to_input_str).getDate();
            $('rdc_eyear').value    = $D(calendar_to_input_str).getFullYear();
            // Disable the values for the date range faux input boxes
            $('calendar_from_input').disable().setStyle({backgroundColor: '#ffffff'});
            $('calendar_to_input').disable().setStyle({backgroundColor: '#ffffff'});
        }
    }
    else {
        // If the date is not range, change the hidden 'type' field to selected
        $('type').value = 'selected';
        // The the hidden field to be set is not "range", remove "teval", which may exist if the user selected range then hit the back button
        if( Object.isElement($('teVal')) ){
            $('teVal').remove();
        }
        // Disable the date value fields since we don't need those in the form
        $('rdc_smonth','rdc_sday','rdc_syear','rdc_emonth','rdc_eday','rdc_eyear').invoke('disable');
    }

    // Okay time to handle location now
    // If we are nationalized then empty out the area parameter and send the form
    if( $('browse_area').value.indexOf(checkUni(browse_area_default_text)) !=-1 && !browse_area_default_text.empty() ) {
        $('browse_area').value = "";
    }
    else {
        if( multiSelect || (current_location == $('browse_area').value ) ) {
            if( multiSelect != 'browse' ) {
                $('browse_area').disable().setStyle({backgroundColor: '#ffffff'});
            }
            $('browse_go_button').enable();
            $('browse_go_button').className = 'go';
            return true;
        }
        else {
            multiSelect = false;
            var return_value = new Ajax.Request('/find_area', {
                method: 'get',
                parameters: { uri: page_context_uri, use_json: 1, area: $F('browse_area') },
                onSuccess: function(t) {
                    var browse_loc_data = t.responseText.evalJSON();
                    if( browse_loc_data.redirect == 1 ) {
                        if( $('rdc_select') && $('rdc_select').value != 'range' ) {
                            $('calendar_from_input').disable().setStyle({backgroundColor: '#ffffff'});
                            $('calendar_to_input').disable().setStyle({backgroundColor: '#ffffff'});
                        }
                        if( $('rdc_select') && $('rdc_select').value == 'range' ) {
                            $('rdc_select').remove();
                        }
                        $('ccs_form').submit();
                    }
                    else if( browse_loc_data.count > 1 ) {
                        $('browse_location_multiple_dropdown').childElements().invoke('remove');
                        $('browse_location_results').update( $F('browse_area') );
                        $('browse_location_eror_multiple').show();
                        buildMulti( browse_loc_data, 'browse' );
                        $('browse_location_eror_multiple_dropdown').show();
                    }
                    else {
                        $('browse_location_eror_not_found').show();
                    }
                    $('browse_go_button').enable();
                    $('browse_go_button').className = 'go';
                },
                onFailure: function(t) {
                }
            });
            return false;
        }
    }
}
// With this implementation, you don't have to set event handlers on the HTML level (no onclick, onmouseover, or onmouseout)
// This is DropMenu Class Constructor
var DropMenu = Class.create( {
    initialize: function(title, dropdown){
            var timer = null;
            $(title).observe('click', function(e) {
                    $(dropdown).toggle();
            });
            $(dropdown).observe('mouseover', function(e) {
                    clearTimeout(timer);
            });
            $(dropdown).observe('mouseout', function(e) {
                    timer = setTimeout( function(){$(dropdown).hide();},500);
            });
    } // end of initialize
});

