
var $D = YAHOO.util.Dom;
var $ = $D.get;
var $E = YAHOO.util.Event;
var $A = YAHOO.util.Anim;
var $M = YAHOO.util.Motion;
var $DD = YAHOO.util.DD;

var direction = 'l';
var tools = new Array();

var _elem = null;
var panelWidth = 400; // px 
   
TestEverything = function() {

    return {
            
        init : function() {            
        
            // preload highslide
            hs.preloadImages();
                
            // Start adding events
            this.setEvents("ToolBoxMoveablePanel");
            
            // cleanup:
            if ($('tools'))
                $('tools').value = '';
            
            if ($('action'))
                $('action').value = '';
            
            if ($('newWindow'))
                $('newWindow').checked = false;            
            if ($('url'))
                $E.on($('url'), 'doubleclick', this.markURL);   
            
            // add highslide events
            $E.on($D.getElementsByClassName("highslide", "a", $('FooterNavi')), 'click', this.hsEvent);
            
            // add event handlers:
            $E.on($('btnTest'), 'click', function() { TestEverything.SubmitForm(); });
            $E.on($('btnMoreOptions'), 'click', function() { TestEverything.SubmitFormBookmarklet(); });
            $E.on($('btnClear'), 'click', function() {
                tools = new Array();
                $('btnClear').value = 'Clear (' + tools.length + ')';    
            });
            
            $E.on($('newWindow'), 'change', function() { $('ToolForm').target = (this.checked) ? '_blank' : ''; });
            
            $E.on($('myIp'), 'click', function(e) {                
                var callback = { success: AsyncHandleSuccessIpAdress, failure: HandleFailure, argument: [ ] };        
                YAHOO.util.Connect.asyncRequest('GET', 'ip.php', callback, null);   
                $E.stopEvent(e);                
                return false;                
            });
            
            $E.on($('Url2Ip'), 'click', function(e) {             
                if ($('url').value == '' || $('url').value == 'http://'){
                    alert('Please enter a URL into the textbox.');
                    $E.stopEvent(e);
                    return false;
                }            
                var callback = { success: AsyncHandleSuccessUrl2Ip, failure: HandleFailure, argument: [ ] };        
                YAHOO.util.Connect.asyncRequest('GET', 'url2ip.php?url=' + escape($('url').value), callback, null);   
                $E.stopEvent(e);                
                return false;                
            });
        
            var callback = { success: AsyncHandleSuccessInit, failure: HandleFailure, argument: [ ] };
            
            if ($('url'))
                $('url').focus();
        
            // Load first page (category overview)
            YAHOO.util.Connect.asyncRequest('GET', "services.php", callback, null);  
        }, 
    
        setEvents : function(target) {      
        
            $E.on($D.getElementsByClassName("moveLeft", "a", $(target)), 'click', this.moveLeft);
            $E.on($D.getElementsByClassName("moveRight", "a", $(target)), 'click', this.moveRight);
            
            $E.on($D.getElementsByClassName("tlBackButton", "div", $('ToolBoxContainerCenter')), 'click', this.navBack);
            $E.on($D.getElementsByClassName("tlNextButton", "div", $('ToolBoxContainerCenter')), 'click', this.navNext);
            
            $E.on($D.getElementsByClassName("tlToolItem", "div", $(target)), 'click', this.checkedTool);
            
        },                 
    
        markURL : function(e) { this.select(); },    
        
        hsEvent : function(e) {  
            $E.stopEvent(e);
            return hs.htmlExpand(this, { contentId: 'highslide-html', objectType: 'iframe', objectWidth: 370, objectHeight: 230} );
        },   
    
        SubmitForm : function(e) {           
            if (tools.length == 0){
                alert('Please select a tool before you submit the form.');
            }
            else {
                $('tools').value = tools.join(",");
                $('action').value = '';
                $('ToolForm').submit();
            }
        },   
        
        SubmitFormBookmarklet : function(e) {   
            if (tools.length == 0){
                alert('Please select a tool before you submit the form.');
            }
            else {        
                $('tools').value = tools.join(",");
                $('action').value = 'bm';
                $('ToolForm').submit();
            }
        },   
    
        checkedTool : function(e) {
                           
            var tid = this.id;
            var exists = false;
               
            for (var i=0; i < tools.length; i++){
                if (tools[i] == tid)
                    exists = true;
            }
               
            var e = $D.getElementsByClassName('ToolCaption', 'div', this)[0];            
            if (e)
                e.style.backgroundImage = (exists) ? '' : 'url("images/checkbox_true.png")';

            if (!exists){            
                // add:
                tools.push(tid);    
            }
            else {            
                // remove:
                for (var i=0; i < tools.length; i++){
                    if (tools[i] == tid)
                        tools.splice(i,1);
                }
            }      
            
            $('btnClear').value = 'Clear (' + tools.length + ')';
        },   
    
        moveRight : function(e) {
            
            $E.stopEvent(e);
            
            direction = 'r';
    
            var callback = {
                success: AsyncHandleSuccess,
                failure: HandleFailure,
                argument: [ ]
            };
        
            YAHOO.util.Connect.asyncRequest('GET', this.href, callback, null);              
        },            
    
        moveLeft : function(e) {
        
            $E.stopEvent(e);
            
            direction = 'l';
            
            var callback = { success: AsyncHandleSuccess, failure: HandleFailure, argument: [ ] };        
            YAHOO.util.Connect.asyncRequest('GET', this.href, callback, null);           
          },
          
          navBack : function(e) {
       
            $E.stopEvent(e);
            
            direction = 'l';
            
            var callback = {
                success: AsyncHandleSuccess,
                failure: HandleFailure,
                argument: [ ]
            };
        
            YAHOO.util.Connect.asyncRequest('GET', 'services.php?id=' + this.id, callback, null);   
        
          },
          
          navNext : function(e) {
        
            $E.stopEvent(e);
            
            direction = 'r';
            
            var callback = { success: AsyncHandleSuccess, failure: HandleFailure, argument: [ ] };        
            YAHOO.util.Connect.asyncRequest('GET', 'services.php?id=' + this.id, callback, null);           
          }
          
};
}();

var AsyncHandleSuccessUrl2Ip = function(callbackResponse) {
    $('url').value = callbackResponse.responseText;
}

var AsyncHandleSuccessIpAdress = function(callbackResponse) {
    $('url').value = callbackResponse.responseText;
}

var AsyncHandleSuccessInit = function(callbackResponse) {
    $('ToolBoxContainerCenter').innerHTML = callbackResponse.responseText;
    TestEverything.setEvents('ToolBoxContainerCenter');   
}

var AsyncHandleSuccess = function(callbackResponse) {
                                        
    // get target container (!direction)
    var target_container = $('ToolBoxContainer' + ((direction == 'l') ? 'Right' : 'Left'));
    if (target_container == null)
        return;
        
    // transfer current container !direction
    target_container.innerHTML = $('ToolBoxContainerCenter').innerHTML;
    
    // move position to right or left       
    YAHOO.util.Dom.setStyle($('ToolBoxMoveablePanel'), 'left', (direction == 'l') ? "-" + (panelWidth * 2) + "px" : "0px");
    
    // replace middle container with new content
    $('ToolBoxContainerCenter').innerHTML = callbackResponse.responseText;
    TestEverything.setEvents('ToolBoxContainerCenter');   
    
    var move_by = (direction == 'l') ? panelWidth : (panelWidth * -1); 
    
    var attributes = {
        points : { by : [move_by, 0] }
    };              
    
    // clear all ids:
    var boxes;

    if (direction == 'r')
        boxes = $D.getElementsByClassName('tlToolItem', 'div', $('ToolBoxContainerLeft'));
    else
        boxes = $D.getElementsByClassName('tlToolItem', 'div', $('ToolBoxContainerRight'));
    
    for (var x=0; x < boxes.length; x++){
        boxes[x].id = "";
    }
    
    // toggle boxes:
    for (var i=0; i < tools.length; i++){
        if($(tools[i]) != null){        
            var e = $D.getElementsByClassName('ToolCaption', 'div', $(tools[i]))[0];            
            if (e)
                e.style.backgroundImage = 'url("images/checkbox_true.png")';
        }
    }
    
    var anim = new $M('ToolBoxMoveablePanel', attributes, 0.5, YAHOO.util.Easing.easeOut);
   
    // reset old container
    if (direction == 'r')
        anim.onComplete.subscribe(function() { $('ToolBoxContainerLeft').innerHTML = ""; });
    else
        anim.onComplete.subscribe(function() { $('ToolBoxContainerRight').innerHTML = ""; });

    anim.animate(); 

};


var HandleFailure = function(o) {
    var result = o.status + " " + o.statusText;
    alert("Transaction failed.\nThe error is: " + result);
};

YAHOO.util.Event.onAvailable('Page', TestEverything.init, TestEverything, true);



