/*

    Pacific Power Global Javascript
    ISITE Design

*/

// prototype with jquery. $ = prototype, $j = jquery.
// can still use $ for jQuery within the jQuery document ready function
var $j = jQuery.noConflict();

// prevent ie6 flicker
try { document.execCommand('BackgroundImageCache', false, true); } catch(e) {}

// sIFR 3
if(typeof sIFR != "undefined") {
    var gillsans = { src: '/etc/designs/pacific_power/flash/GillSans_sIFR3.swf' };
    sIFR.activate(gillsans);
    
    sIFR.replace(gillsans, {
        selector: 'h1',
        css: '.sIFR-root { background-color: transparent; color: #000000; }',
        wmode: 'transparent',
        repaintOnResize: true
    });
}

var headerToggleText = {
    show : "<span>+</span> Show account info",
    hide : "<span>-</span> Hide account info"
}

// Dom loaded / jQuery
jQuery(function($) {
    
    // make sure page title fills content width and fits next to utility navigation
    if($("ul.pageactions").length) { $("h1").addClass("fixwidth"); }

    // Pull the label, make lowercase, set as default value and hide it
    $("#sitesearch input").inputSetter(1);

    // ie6 special cases
    if($.browser.msie && parseInt($.browser.version) < 7){
        
        // add class to drop downs and buttons
            $("#nav li, button, #lead2 a, input.btn, .btn-select-address, .btn-skip-quiz, .btn-check-eligibility").hover(
            function() { var c = $(this).attr("class").split(" ")[1] || ""; $(this).addClass("over over-"+c); },
            function() { var c = $(this).attr("class").split(" ")[1] || ""; $(this).removeClass("over over-"+c); }
        );      
        
        // fix elements over selects z-index issue
        // load script without ajax to avoid ActiveX requirement
        function loadScript(src, callback) {
            var script = document.createElement("script");      
            if(script.attachEvent) {
                script.attachEvent("onreadystatechange",
                function() { loadScript.callbackIE(callback); });
            }
            script.src = src;
            document.getElementsByTagName("head")[0].appendChild(script);
        }
        loadScript.callbackIE = function(callback) {
            var target = window.event.srcElement;
            if(target.readyState == "loaded")
            callback.call(target);
        };      
        callback = function() { $("#nav ul, .custom-select-list-wrapper").bgiframe(); };
        
        loadScript("/etc/designs/pacific_power/js/jquery.bgiframe.min.js", callback);
    
    }// if ie6
        
    // show drops on focus
    $("#nav a").focus(function(){ $(this).parents("li").addClass("over"); })
                .blur(function(){ $(this).parents("li").removeClass("over"); });
    $("#nav>li").mouseover(function() { $("#nav>li").not($(this)).removeClass("over"); });

    // empower print
    $("a.print").click(function(){ window.print(); return false; });
    
    // popup help
    $("#header a.pop, #primary a.pop, #secondary a.pop, #footer a.pop").live("click",showHelp);
    // external window
    $("#header a.external, #primary a.external, #secondary a.external, #footer a.external").live("click",openExternal);
    // popup window (no icon)
    $("#header a.popup-noicon, #primary a.popup-noicon, #secondary a.popup-noicon, #footer a.popup-noicon").bind("click",openExternal);
    
    // table row highlight
    // $("tbody tr").hover(function(){ $(this).toggleClass("highlight"); }, function(){ $(this).toggleClass("highlight"); });
    
    // popup for secure
    $("#header a.secure, #primary a.secure, #secondary a.secure, #footer a.secure").bind("click",showHelp);
    
    // select all : Add Electric Account Step 2
    $("td.selectall").parents("tr.hide").removeClass("hide");
    $("td.selectall .trigger").bind("click",toggleSelection);
    $("td input:checkbox").bind("click",toggleDisabled).bind("change",toggleDisabled);
    
    // ACH additions
    $("table.noborder").find("tbody tr:last").addClass("last");
    $("tbody tr").find("td:first").addClass("first");
    $("tbody tr").find("td:last").addClass("last");
    
    // enroll toggle
    $("fieldset.toggledisabled input:radio").bind("click",toggleDisabled).bind("change",toggleDisabled);
    
    // true/false toggle
    $("fieldset.toggledisabled-true input:radio").bind("click",toggleDisabledTrue).bind("change",toggleDisabledTrue);
    
    // toggle
    $("input.toggler:checkbox,input.toggler:radio").bind("click",toggleDisabledSingle).bind("change",toggleDisabledSingle);
    $(".toggler select").bind("change",toggleDisabledSingle);   
    $(".selector input:not(:radio)").click(function(){ var $this = $(this); setTimeout(function(){ $this.focus(); },100); });
    
    // date picking
    if($("input.date-picker").length>0) { 
        Date.firstDayOfWeek = 7;
        Date.format = 'mm/dd/yyyy';
        
        $("input.date-picker").not(".future").datePicker({startDate:'01/01/2008',endDate: (new Date()).asString()});
        $("input.date-picker.future").datePicker({startDate:(new Date()).asString()});
        
        $("input.date-start").bind("dpClosed",function(e, selectedDates) {
                                            var d = selectedDates[0];
                                            if (d) {
                                                d = new Date(d);
                                                $(this).parents("fieldset").find("input.date-end").dpSetStartDate(d.addDays(1).asString());                 
                                            }
                                        });
        
        $("input.date-end").bind("dpClosed",function(e, selectedDates) {
                                            var d = selectedDates[0];
                                            if (d) {
                                                d = new Date(d);
                                                $(this).parents("fieldset").find("input.date-start").dpSetEndDate(d.addDays(-1).asString());
                                            }
                                        });     
    } // end date pick  
    
    // filter list multidate -------------- removed. was in ut-7
    /*
    if($("li.filter-list-multidate").length){
        $("form.form-filter-list .date-range").hide();
        
        var pickrange = false;
        var picktext = {
            single  : ["date","date range"],
            range   : ["date range","single date"]
        };
        
        $("a.date-pick-type").click(function(){
        
            var $parent = $(this).parents("li");
        
            if(pickrange) {     
                $(".date-range",$parent).hide();
                $(".date-single",$parent).show();
                $("input.selectdaterange",$parent).val("false");
                $("label span",$parent).text(picktext.single[0]);
                $("label a",$parent).text(picktext.single[1]);
                pickrange = false;          
            } else {        
                $(".date-single",$parent).hide();
                $(".date-range",$parent).show();
                $("input.selectdaterange",$parent).val("true");
                $("label span",$parent).text(picktext.range[0]);
                $("label a",$parent).text(picktext.range[1]);
                pickrange = true;                                           
            }       
            return false;
        
        }); 
    }
    */
    
    // faq expand/collapse
    enableExpand("dl.faq,dl.collapsible");
    
    // sitemape expand/collapse
    enableTree("div.sitemap ul");
    
    // toggle global header on account pages
    $("a.trigger-account").click(function(e){
              var html = ($(this).hasClass('open'))? headerToggleText.hide : headerToggleText.show;
              $(this)[(!$(this).hasClass('open'))? "addClass" : "removeClass"]('open').html(html);
              $("#globalheader div.collapsible").slideToggle("fast");

        var cookie = getCookie("accountinfo")=="hide" ? "show" : "hide";
        setCookie("accountinfo",cookie);
        if(typeof $.fn.customSelect != "undefined") {
            $.fn.customSelect.hideDrop();
        }
        return false;
    });
    if(getCookie("accountinfo")=="hide") {
        $("#globalheader div.collapsible").hide();
        $("a.trigger-account").html(headerToggleText.show).addClass("open");
    }
    
       //open drop down
       $('div.custom-select-display').bind('click',function(event){
              event.stopPropagation();
              var list = $('div.custom-select-list-wrapper');
              list[(list.is(':visible'))?'hide':'show']();
              $('.custom-select-list-wrapper li.selected').focus();
       });
       
       //hide drop down upon unfocus
       $(document).bind('click',function(){
              if($('div.custom-select-list-wrapper').is(':visible')){
                     $('div.custom-select-list-wrapper').hide();
              }
       });
       
       //select drop down item
       $('.custom-select-list-wrapper li').bind('click',function(){
              if($('li.selected').length > 0){
                     $('li.selected').removeClass('selected');
              }
              $(this).addClass('selected');
              $('.custom-select-display').html($(this).html()).find('.account-full').remove();
              $('.custom-select-list-wrapper').hide();
              $('.account-detail').html($(this).find('a').html()).find('.account-nick').remove();
                     if($('.account-detail .account-full').length > 0){
                           $('.account-detail').html($('.account-detail .account-full').html());
                     }        
              setAccountNumber();
       });

       //keys events to focus, blur and select drop down items
       var shiftkey = false;
       $('div.custom-select-wrapper').keydown(function(e) {      
       if(!$(".custom-select-list-wrapper:visible",this).length) { return true; }
              switch(e.keyCode) {
                     case 16: // shift                               
                           shiftkey = true;
                           e.preventDefault();
                           break;
                     case 38: // up
                           moveTo($('li.selected',this),-1);
                           e.preventDefault();
                           break;
                     case 40: // down
                           moveTo($('li.selected',this),1);
                           e.preventDefault();
                           break;
                     case 9: // tab
                           moveTo($('li.selected',this),shiftkey ? -1 : 1);
                           e.preventDefault();  
                           break;
                     case 27: //escape
                           var list = $('div.custom-select-list-wrapper');
                           list[(list.is(':visible'))?'hide':'show']();
                           break;
                     case 13:// enter
                           $('.custom-select-display').html($('li.selected',this).html()).find('.account-full').remove();
                           $('.account-detail').html($('li.selected',this).find('a').html()).find('.account-nick').remove();
                           $('.custom-select-list-wrapper').hide();
                           setAccountNumber();
                    
              }
       }).keyup(function(e){
              shiftkey = e.keyCode == 16 ? false : shiftkey;
              e.preventDefault();        
       });

    // custom selector
    if(typeof $.fn.customSelect != "undefined") {
        $("select.custom").customSelect(); // form onchange attribute makes submit   .change(function(){ $(this).parents("form").submit(); });
    }

    $("button.confirm").click(function(){ return confirm($(this).attr("title")); });
    
    // expand breadcrumb list
    $("#breadcrumb-expand a").click(function(){ 
        $(this).parents("ul").find("li.hide").show().end().end().parent().remove();     
        return false;                                            
    });
    
    // toggle extra form fields
    $("ol.collapsible li,ul.collapsible li").not(".toggler").not(".nohide").hide().end().end().end().find(".toggler input").click(function(){
        var val = $(":radio:checked",$(this).parents("fieldset")).val();
    
        // two radio toggle modes: one to match to class of selected value, other to show/hide all based on boolean
        if($(this).parents("li.match-class").length){
            $(this).parents(".collapsible").find("li").not(".toggler").not(".nohide").hide().end().end().end().find("li."+val).show();
        } else {
            if(!parseInt(val)) {            
                $(this).parents(".collapsible").find("li").show();
                if($(this).parents("li.fieldset").length){
                    $(this).parents("fieldset").next("div.collapsible").show();
                }
            } else {            
                $(this).parents(".collapsible").find("li").not(".toggler").not(".nohide").hide();
                if($(this).parents("li.fieldset").length){
                    $(this).parents("fieldset").next("div.collapsible").hide();
                }   
            }
        }
    }).end().find(".toggler select").change(function(){ 
        var classname = $("option:selected",this).attr("class") || "select";
        $(this).parents(".collapsible").find("li").not(".toggler").not(".nohide").hide().end().end().end()
        .find("."+classname).show();    
    });
    $("div.panel div.collapsible").hide();
    
    //activate tooltip
    if(typeof $.fn.tooltip != "undefined") {
        $(".wrapper-rememberme span.tooltip").tooltip({top:0});
    }
    
    // toggle content
    $("div.toggle-wrapper div.toggle-content").hide();
    $("div.toggle-wrapper a.toggle-trigger").click(function(){
        $(this).closest("div.toggle-wrapper").find("div.toggle-content").toggle();
        return false;
    }); 
    
    // if use has browser configured to not display colors or images, reset to fix collision with image replacement
    resetBackgrounds(); 
    
});// document ready

//if use has browser configured to not display colors or images, reset to fix collision with image replacement
var resetBackgrounds = function() {
    if (!$j('#accessibility-reset-styles').length && // not already inserted
           ((!$j('body.popup').length && $j('body').css("background-image") == "none" ) || // popups don't have a bg image by default. this is always false on popups by body class check
            ($j('body.popup').length && $j('.btn').css("background-image") == "none" )) // if popup, should have a close button. check its background-image property
       )
    {
        $j('head').append('<link id="accessibility-reset-styles" rel="stylesheet" type="text/css" media="all" href="/etc/designs/pacific_power/css/accessibility-reset.css" />');           
    }              
};

//image preloader. usage: $j.preloadImages(["image1.gif","image2.gif"]);
jQuery.preloadImages = function(images) {
                jQuery.each(images,function(){
                    jQuery("<img />").attr("src",this).css({position:"absolute",left:"-9999em",top:"0",visibility:"hidden"}).appendTo("body");
                                                                                                                
                });
}


// select all : Add Electric Account Step 2, Remove Account
var toggleSelection = function(){
    var $this = $j(this);
    var check = $this.parent().find("span:visible").is(".select");
    $this.parent().find("span").toggle();
    $this.parents("table").find(":checkbox").attr("checked",check).filter(":first").trigger("change");
    return false;                                           
};
var toggleDisabled = function(e){
    var $this = $j(this);
    if($this.parents("tbody").find("input:checked").length || $j(e.target).parents(".toggledisabled").find("input:checked").length) {
        $j(".btn-disabled").addClass("btn-enabled").removeClass("btn-disabled").removeAttr("disabled");
    } else {
        $j(".btn-enabled").addClass("btn-disabled").removeClass("btn-enabled").attr("disabled","disabled"); 
    }
};

// toggle only if true
var toggleDisabledTrue = function(e){
    var $this = $j(this);
    if($this.val()==1) {
        $j(".btn-disabled").addClass("btn-enabled").removeClass("btn-disabled").removeAttr("disabled");
    } else {
        $j(".btn-enabled").addClass("btn-disabled").removeClass("btn-enabled").attr("disabled","disabled"); 
    }
};

// generic enable/disable toggler for checkboxes
var toggleDisabledSingle = function(){
    var $this = $j(this);
    if($this.is(":checked") || $this.val()!="") {
        $j(".btn-disabled").addClass("btn-enabled").removeClass("btn-disabled").removeAttr("disabled");
    } else {
        $j(".btn-enabled").addClass("btn-disabled").removeClass("btn-enabled").attr("disabled","disabled"); 
    }
};

// create help popup
var showHelp = function(el){
    var $obj = el.type == "" ? $j(el) : $j(this);
    var w = screen.width || 800;
    var h = screen.height || 600;   
    var popW = 550, popH = 480; 
    var leftPos = (w-popW)/2, topPos = (h-popH)/2;
    var settings = "status=1,location=0,menubar=0,resizable=1,scrollbars=1,width="+popW+",height="+popH+",top="+topPos+",left="+leftPos;
    var newwindow = window.open($obj.attr("href"),"help",settings);
    return false;
};

// external link
// ref: http://www.456bereastreet.com/archive/200610/opening_new_windows_with_javascript_version_12/
var openExternal = function(){
    var extwin = window.open($j(this).attr("href"), "_blank");
    if (extwin) {
        if (extwin.focus) extwin.focus();
        return false;
    }
    extwin = null;
    return false;
}

// create open/close. receives dl.
var enableExpand = function(el) {
    
    var reveal = $j(el).find("dd .reveal-content").length;
    
    // hide dd's if not using reveal-content + noscript pattern
    if(!reveal) { $j(el).find("dd").hide(); }
        
    $j(el).addClass("expander").find("dt").prepend('<a class="btn" href="#">+</a>').click(function(){
            var textinsert = $j("a.btn",this).text() == "+" ? "-" : "+";
            $j(this).toggleClass("open").next("dd").each(function(){
                // toggle dd or reveal-content block
                var $obj = reveal ? $j(this).find(".reveal-content") : $j(this);
                $obj.slideToggle("fast");               
            }).find("a.btn").text(textinsert);          
        }).hover(function(){
            $j("a",this).addClass("hover"); $j(this).addClass("hover"); }, function(){ $j("a",this).removeClass("hover"); $j(this).removeClass("hover");
        }).find("a.btn").click(function(){ $j(this).parents("dt").click(); return false; });        
};

// create open/close tree. receives ul.
var enableTree = function(el) {
        
    $j(el).addClass("expander").find("li li ul").hide();
    
    $j("li li",el).each(function(){                          
        if($j("li",this).length>0) {
            $j(this).prepend('<a class="btn" href="#">+</a>')
            $j("a.btn",this).click(function(){                                         
                var textinsert = $j(this).text() == "+" ? "-" : "+";
                $j(this).text(textinsert).toggleClass("open").parent("li").find("ul:first").slideToggle("fast");                
                return false;           
            });
        }   
    }); 
};

// if user has browser configured to not display colors or images, reset to fix collision with image replacement
var resetBackgrounds = function() {
    if(
        !$j('#accessibility-reset-styles').length // not already inserted
        && (
                ( !$j('body.popup').length && $j('body').css("background-image") == "none" ) // popups don't have a bg image by default. this is always false on popups by body class check
                ||
                ( $j('body.popup').length && $j('.btn').css("background-image") == "none" ) // if popup, should have a close button. check its background-image property
            )
       )
    {
        $j('head').append('<link id="accessibility-reset-styles" rel="stylesheet" type="text/css" media="all" href="_resources/css/accessibility-reset.css" />');   
    }   
};

// pull label and insert as field. clear with click
// optional lower param if == 1, string toLowerCase
jQuery.fn.inputSetter = function(lower) {   
    return this.each(function() {
        var $input = jQuery(this);
        var $label = jQuery("label[for='"+$input.attr("id")+"']");
        var labeltext = lower && lower==1 ? $label.text().toLowerCase() : $label.text();
        $label.hide();
        $input.val(labeltext);      
        $input.focus(function() { if (this.value == labeltext) { this.value = ""; } })
              .blur(function() { if (!this.value.length) { this.value = labeltext; } });        
    });
};

// image preloader : $j.preloadImages(["image1.gif","image2.gif"]);
jQuery.preloadImages = function(images) {
    jQuery.each(images,function(){
        var img = jQuery("<img>").attr("src",this);                           
    });
}

function removeBlanks(s) {
    var temp="";
    if(s == null)s = "";
    for(var i=0;i<s.length;++i) {
       var c=s.charAt(i)
       if(c!=" ") temp += c
    }
    return temp
 }

// Creates temporary cookie with given name and value and expiration time in minutes

function setTempCookie( name, value, mins, path, domain ) {
    var today = new Date();
    today.setTime( today.getTime() );
    if ( mins ) { mins = mins * 1000 * 60; }
    var expires_time = new Date( today.getTime() + (mins) );
    document.cookie = name+"="+escape( value ) +
        ( ( mins ) ? ";expires="+expires_time.toGMTString() : "" ) + //expires.toGMTString()
        ( ( path ) ? ";path=" + path : "" ) +
        ( ( domain ) ? ";domain=" + domain : "" );
}

// Cookies get/set/delete
function getCookie( name ) {
    var start = document.cookie.indexOf( name + "=" );
    var len = start + name.length + 1;
    if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) { return null; }
    if ( start == -1 ) return null;
    var end = document.cookie.indexOf( ";", len );
    if ( end == -1 ) end = document.cookie.length;
    return unescape( document.cookie.substring( len, end ) );
}
function setCookie( name, value, expires, path, domain, secure ) {
    var today = new Date();
    today.setTime( today.getTime() );
    if ( expires ) { expires = expires * 1000 * 60 * 60 * 24; }
    var expires_date = new Date( today.getTime() + (expires) );
    document.cookie = name+"="+escape( value ) +
        ( ( expires ) ? ";expires="+expires_date.toGMTString() : "" ) + //expires.toGMTString()
        ( ( path ) ? ";path=" + path : "" ) +
        ( ( domain ) ? ";domain=" + domain : "" ) +
        ( ( secure ) ? ";secure" : "" );
}
function deleteCookie( name, path, domain ) {
    if ( getCookie( name ) ) document.cookie = name + "=" +
            ( ( path ) ? ";path=" + path : "") +
            ( ( domain ) ? ";domain=" + domain : "" ) +
            ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}
//Move To Next or Prev Item in custom select box
function moveTo($obj,dir){
       if($obj[(dir == 1)?'nextAll':'prevAll']().length > 0){
              $obj.removeAttr('class')[(dir == 1)? 'next' : 'prev' ]('li').addClass('selected').find('a').focus();
       }                  
}

function setAccountNumber(){
       if($j("li.selected span.account-full").length > 0){
              var n = $j('li.selected span.account-full').text(),
              t = $j('li.selected span.account-full').find('span').text(); 
       }else{
              var n = $j("li.selected a").text(),
              t = $j('li.selected a').find('span').text(); 
       }
       n = n.replace(t,'');
       n = $j.trim(n);    
    var inputId = getAccountNumberField();      
    if($j('[id=' + inputId + ']').val() != n){
              $j('[id=' + inputId + ']').val(n);
              $j('.form-accountselect').submit();
       }
}
