(function() {   // begin anonymous function
// Shorthand Notation
var $U=YAHOO.util;
var $D=$U.Dom;
var $E=$U.Event;
var $A=$U.Anim;
var $C=$U.Connect;
var $M=$U.Motion;
var YNL = YAHOO.namespace("News.Local");
var toggle;
var cont = [];
var items = [];
var hidden = [];
var flag;

/**
 * YAHOO.News.Local.loadCustomize
 * @function
 **/        
YNL.loadCustomize = function() {
    // Load Customization Event Handlers
    var localCustomize = document.getElementById('lcl-nws-cstm');
    toggle = $D.getElementsByClassName('lcl-cstm-lnk','a');
    tln = toggle.length;
    var params = { el:localCustomize }
    for (var x=0; x<tln; x++) {
        $E.addListener(toggle[x],'click',YNL.toggleCustomize,params);
    }
    
    YNL.error = $D.get('error'); // error message text
    
    // Save Event Handler
    var save = $D.getElementsByClassName('save-custom','a')[0];
    $E.addListener(save,'click',YNL.saveOrder,localCustomize);
    
    // Load Drag and Drop
    var listitems = localCustomize.getElementsByTagName('LI');
    var ln = listitems.length;
    for (var i=0; i<ln; i++) {
        items[i] = new YNL.DDList(listitems[i].id,"list");
        items[i].setPadding(5, 0, 5, 0);
    }
    cont[0] = new YAHOO.util.DDTarget("active","list");
    cont[1] = new YAHOO.util.DDTarget("inactive","list");
    //hidden[0] = new YNL.DDListBoundary("hidden1");
    //hidden[1] = new YNL.DDListBoundary("hidden2");
    
    //YAHOO.widget.Logger.enableBrowserConsole();
}

/**
 * YAHOO.News.Local.toggleCustomize
 * @function
 * @param args {Event} Mouse click event. 
 * @param args {Object} Container div element. Required. 
 **/
YNL.toggleCustomize = function(e,obj) {
    if (!obj) { return }
    if (obj.el) { var el = obj.el; } else { var el = obj; }
    if (el.style.display == 'none' || el.style.display == '') {
        $D.addClass(toggle[0],'open');
        el.style.display = 'block';
    } else {
        $D.removeClass(toggle[0],'open');
        el.style.display = 'none';
    }
    $E.preventDefault(e);
}

/**
 * YAHOO.News.Local.DDList
 * @function
 * @param args {Id} Id of element to be drag and dropped. Required. 
 * @param args {sGroup} Group that contains similar elements. Optional. 
 * @param args {container} Container custimization div, used to optimize the list of sources to sort. Required.  
 **/
YNL.DDList = function(id, sGroup) {
    if (id) {
        this.init(id, sGroup);
        this.initFrame();
        // To Reorder List after DD
        this.active = $D.get('active');
        this.inactive = $D.get('inactive');
    }
};
YAHOO.extend(YNL.DDList, YAHOO.util.DDProxy);

/* ===== startDrag ===== */
YNL.DDList.prototype.startDrag = function(x, y) {
    this.dragEl = this.getDragEl();
    this.clickEl = this.getEl();
    this.dragEl.innerHTML = this.clickEl.innerHTML;
    liflag = 0;
    
    // count active LI's
    var activeli = this.active.getElementsByTagName('LI');
    if (activeli.length == 1) {
        YNL.error.style.display = 'block';
    }
    
    //get heights of ULs
    var activer = $D.getRegion(this.active);
    var inactiver = $D.getRegion(this.inactive);
    var activeh = activer.bottom - activer.top; 
    var inactiveh = inactiver.bottom - inactiver.top;
    if (activeh >= inactiveh) {
        $D.setStyle(this.inactive,'height',activeh+'px');
    } else {
        $D.setStyle(this.active,'height',inactiveh+'px');
    }
    YAHOO.util.DDM.refreshCache(this.groups);
    
    $D.setStyle(this.clickEl, 'height', '23px');
    $D.setStyle(this.clickEl, 'border', '1px solid #ccc');
    if ($D.hasClass(this.clickEl.parentNode,'on')) {
        $D.setStyle(this.clickEl, 'width', '205px');
        $D.setStyle(this.clickEl, 'marginLeft', '18px');
    }
    $D.setStyle(this.clickEl, 'opacity', '0.5');
    $D.setStyle(this.dragEl, 'border', 'none');
    this.clickEl.innerHTML = '';
};

/* ===== endDrag ===== */
YNL.DDList.prototype.endDrag = function(e, id) {

    this.clickEl.innerHTML = this.dragEl.innerHTML;
    $D.setStyle(this.clickEl, 'marginLeft', '0px');
    $D.setStyle(this.clickEl, 'height', 'auto');
    $D.setStyle(this.clickEl, 'border', 'none');
    $D.setStyle(this.clickEl, 'width', 'auto');
    $D.setStyle(this.clickEl, 'opacity', '1.0');
    
    //reset heights of ULs
    this.inactive.style.height = "auto";
    this.active.style.height = "auto";
    
    // count active LI's
    var activeli = this.active.getElementsByTagName('LI');
    if (activeli.length > 0) {
        YNL.error.style.display = 'none';
    }
    
    // Reset Source Numbers
    var em = this.active.getElementsByTagName('em');    
    var eln = em.length;
    var j = 1;
    for (x=0;x<eln;x++) {
        em[x].innerHTML = j;
        j++;
    }
    flag = 0;
};

/* ===== onDragEnter ===== */
YNL.DDList.prototype.onDragEnter = function(e, id) {
    
    if ($D.hasClass(this.clickEl.parentNode,'on')) {
        $D.setStyle(this.clickEl, 'width', '205px');
        $D.setStyle(this.clickEl, 'marginLeft', '18px');
    } else {
        $D.setStyle(this.clickEl, 'width', 'auto');
        $D.setStyle(this.clickEl, 'marginLeft', '0px');
    }
   
    if ("string" == typeof id) {
        this.el = YAHOO.util.DDM.getElement(id);
    } else { 
        this.el = YAHOO.util.DDM.getBestMatch(id).getEl();
    }   
    
    this.ely = $D.getY(this.el);
}

/* ===== onDragOver ===== */
YNL.DDList.prototype.onDragOver = function(e, id) {

    var dragy = $D.getY(this.dragEl);

    if (dragy <= this.ely && this.el.nodeName == 'LI') {
        var p = this.el.parentNode;
        p.insertBefore(this.clickEl, this.el);
    }
    if (dragy >= this.ely && this.el.nodeName == 'LI') {
        this.el.parentNode.insertBefore(this.clickEl,this.el.nextSibling);
    }
};

/* ===== onDragDrop ===== */
YNL.DDList.prototype.onDragDrop = function(e, id) {
    var cont = $D.get(id);
    if (cont.nodeName == 'LI') { flag = 1; }
    if (cont.nodeName == 'UL' && flag == 0) {
        cont.appendChild(this.clickEl);
    }
}

YNL.DDListBoundary = function(id, sGroup) {
    if (id) {
        this.init(id, sGroup);
        this.isBoundary = true;
    }
};
YAHOO.extend(YNL.DDListBoundary, YAHOO.util.DDTarget);

/**
 * YAHOO.News.Local.saveOrder
 * @function
 * @param args {Event} Mouse click event. 
 * @param args {Object} Container div element. Required. 
 **/
YNL.saveOrder = function(e,obj) {
    $E.preventDefault(e);
    if (!obj) { return }

    // get active sources
    var ul = $D.getElementsByClassName('on','ul',obj)[0];
    var li = ul.getElementsByTagName('li');
    if (li && li.length > 0) {
        YNL.error.style.display = 'none';
        var ln = li.length;
        var aActiveSrc = new Array();
        for (var x=0; x<ln; x++) {
            aActiveSrc[x] = li[x].id;
        }
    } else {
        YNL.error.style.display = 'block';
        return false;
    }

    // get inactive sources    
    var ul = $D.getElementsByClassName('off','ul',obj)[0];
    var li = ul.getElementsByTagName('li');
    var ln = li.length;
    if (ln > 0) {  
        var aInactiveSrc = new Array();
        for (var x=0; x<ln; x++) {
            aInactiveSrc[x] = li[x].id;
        }
    } else {
        aInactiveSrc = '0';
    }
    
    // stories container
    var container = document.getElementById('indexstories');
    container.innerHTML = '<img src="http://l.yimg.com/a/i/br/misc/16_loading.gif" alt="Loading" /> Saving Order and Reloading Stories...';
    YNL.toggleCustomize(e,obj);
    
    // Send Sources to Ajax Script
    var callback = {
                success: function(o) {
                            container.innerHTML = o.responseText;
                },
                failure:function(o) {
                            container.innerHTML = "Local News Could Not Be Loaded. Please Try Again.";
                },
                argument: obj
    };
    // Get woeid from the div tag "lcl-nws-woeid"
    var woeidElement = document.getElementById('lcl-nws-woeid');
    var woeid;
    if(woeidElement)
    {
    	woeid = woeidElement.innerHTML;
    }
    var transaction = $C.asyncRequest('GET', '/newsplatform/us/local/index.php?m=user_pref&a=setSourcePrefs&active=' + aActiveSrc + '&inactive=' + aInactiveSrc + '&woeid=' + woeid, callback);  
}

$E.onAvailable('lcl-nws-cstm',YNL.loadCustomize);

})();   // end anonymous function
