function MainController(){
    var arrControllers;
    this.arrControllers = 0;
    this.addDiv = function(targetDiv, className){
        var target;
        if(!(target = $(targetDiv))){
            target = document.createElement('div');
            target.id = targetDiv;
            target.className = className;
            $('everything').appendChild(target);
        }
        return target;
    }
    this.getController = function(name){
        var controller;
        switch(name){
            case "Place":
                controller = this.arrControllers[0];
                break;
            case "Auth":
                controller = this.arrControllers[1];
                break;
            case "User":
                controller = this.arrControllers[2];
                break;
            case "Forum":
                controller = this.arrControllers[3];
                break;
            case "Main":
                this.innerRequest(args);
                return;
                break;
        }
        return controller;        
    }
    this.innerRequest = function(args){
        var param = args[1];
        
        switch(param){
            case "coverText":
                var target = "coverDiv";
                var text = args[2];
                var nosize = args[3]?true:false;
                ns4 = (document.layers)? true:false
                ie4 = (document.all)? true:false
                winW = (ns4)? window.innerWidth : document.body.offsetWidth;
                winH = (ns4)? window.innerHeight : document.body.offsetHeight;

                var deltaY = getScrollY();
                $(target).style.left = 0 + "px";
                $(target).style.width = winW + "px";
                $(target).style.top = deltaY + "px";
                $(target).style.height = winH + "px";
                
                Effect.Appear(target,{duration:0.3,to:0.5});
                
                target = 'coverTextDiv';
                if(nosize){
                    $(target).style.width = 100;
                    $(target).style.height = 100;
                    $(target).style.padding = 0;
                    $(target).style.margin = 0;
                }
                var x = Math.round(winW - 640)/2;
                var y = 100+deltaY;
                $(target).style.left = x + "px";
                $(target).style.top = y + "px";
                var str = '<center>Loading<br><img src="/public/images/loader_onwhite.gif"></center>';
                $(target).innerHTML = str;
                Effect.Appear(target);
                url = "/text/"+text+"/";
                new Ajax.Request(
                    url,{
                         method:'post',
                         postBody:params,
                         onSuccess: function(transport){
                            var json = transport.responseText;
                            if(!nosize){
                                json += "<br>&nbsp;<br>";
                                json += "<center><a href='javascript:;' onclick='Effect.Fade(\"coverDiv\");Effect.Fade(\"coverTextDiv\");'>Close</a></center>"
                            }
                            $(target).innerHTML = json;
                            
                         },
                         onFailure: function(transport) {
                            msgBox("Server connection failure. Please try again later.",1500);
                            Effect.Fade("coverDiv");
                            Effect.Fade("coverTextDiv");
                         }
                    }
                    );
                
                //AboutUs
            break;
            case "ExpandFeedback":
                var target = 'betafeedback';
                if($(target)){
                    
                    if($(target).style.display=='none'){
//                        tempBetaContent = $(target).innerHTML;
                        Effect.BlindDown(target);
                            //$(target).innerHTML = tempBetaContent;
                            //$(target).style.zIndex = 110;

                    }else{
                        if($F('feedback_text')!=''){
                            var str = "You haven't send your feedback.<br>";
                            str += "Do you want to send it now?<br>&nbsp;<br>";
                            str += "<center><a href='javascript:;' onclick='mainController.request([\"Main\",\"BetaSendFeedback\"]);'>Yes</a> &nbsp; &nbsp; &nbsp; ";
                            str += "<a href='javascript:;' onclick='hideBox();'>No</a></center>";
                            msgBox(str);
                        }
                        
                        Effect.BlindUp(target);       
                    }
                }
                break;
            case "BetaSendFeedback":
                //var email = $F('feedback_email');
                //var name = $F('feedback_name');
                var text = $F('feedback_text');
                if(text==''){
                    Effect.Shake('feedback_text');
                    $('feedback_text_error').innerHTML = " - Please enter feedback";
                    return;
                }else{
                    $('feedback_text_error').innerHTML = "";
                }
                msgBox('<center><img src="/public/images/loader_ongrey.gif"></center><br>Sending feedback');
/*                var params = "email="+escape(email);
                params += "&name="+escape(name);*/
                var params = "text="+escape(text);
                url = "/beta/feedback/";
                var target = 'betafeedback';
                new Ajax.Request(
                    url,{
                         method:'post',
                         postBody:params,
                         onSuccess: function(transport){
                            msgBox("Thank you for your feedback!",1500);
//                            $('feedback_email').value='';
                            $('feedback_text').value='';
//                            $('feedback_name').value='';
                            Effect.BlindUp(target);
                         },
                         onFailure: function(transport) {
                            msgBox("Server connection failure. Please try again later.",1500);
                         }
                    }
                    );
                
                break;
        }
        
    }
    this.request = function(args){
        //log(args[0] + ":" + args[1]);
        name = args[0];
        var controller;
        switch(name){
            case "Place":
                controller = this.arrControllers[0];
                break;
            case "Auth":
                controller = this.arrControllers[1];
                break;
            case "User":
                controller = this.arrControllers[2];
                break;
            case "Forum":
                controller = this.arrControllers[3];
                break;
            case "Main":
                this.innerRequest(args);
                return;
                break;
        }
        controller.request(args);
    }
    this.load = function(name){
        document.write('<script src="/public/scripts/Controllers/'+name+'/'+name+'Controller.js" type="text/javascript"></script>');
    }
    this.afterLoad = function(){
        if($('place_search_q'))
            new Ajax.Autocompleter("place_search_q", "autocomplete_choices", "/place/autocomplete", {paramName: "value", minChars: 2, indicator: 'indicator1'});
        /*if($('log')){
            new Draggable('log');
        }*/
        this.arrControllers = new Array(
        new PlaceController(),
        new AuthController(),
        new UserController(),
        new ForumController()
        );
        //Event.observe(window,'keypress',keypressed);   
        Event.observe(window,'scroll',scrollPosition);
        if($('searchFilterHotTrack1')){
            var searchFilterSlider = new Control.Slider('searchFilterHotTrack1Handle','searchFilterHotTrack1',{
                onChange:function(v){
                    mainController.request(new Array('Place','searchFilterTracker',v));
                },
                onSlide:function(v){
                  $('searchFilterHotTrack1Handle').innerHTML = "<center>"+Math.round(v*100,0) + " %</center>";  
                },
                sliderValue:0.5
            });

        }
        actualResize();
        var urlparams = location.href.split('#');
        if(urlparams.length>1){
            this.request(new Array(urlparams[1],'getParamsFromRequest',urlparams[2]));
        }
    }
}
function keypressed(e){
	var code;
	if (!e) var e = window.event;
    code = (e.keyCode?e.keyCode:e.charCode);
	//var character = (code.keyCode);
	switch(code){
	   case 108:
	       if(e.ctrlKey){
	           if($('log')){
	               Effect.Appear('log');
	               return false;
	           }
	       }
	}
}
        ns4 = (document.layers)? true:false
        ie4 = (document.all)? true:false

searchFilterButtonLeft = true;
function actualResize(){
//    log('resize: '+(searchFilterButtonLeft?'true':'false'));
    resizeWaiter = false;
    //var target = $("searchFilterButton");
    var target = false;//$("searchFilterButton");
    if(target && searchFilterButtonLeft){
        winW = (ns4)? window.innerWidth-16 : document.body.offsetWidth-20;
        var dim = $('searchFilter').getDimensions();
        
        if(winW>784){
            left = Math.round((winW)/2+804/2-177)+6-75;
        }else{
            winW = 784;
            left = Math.round((winW)/2+804/2-177)+6-75;
        }
            //left = left + dim.width;
        //log('searchFilterButton: position left');        
        $('searchFilterButton').style.left = left + "px";
    }
    if($('betabutton')){
        winW = (ns4)? window.innerWidth-16 : document.body.offsetWidth-20;
        //$('betabutton').style.left = (winW-300) + "px";
        deltaY = getScrollY();
        $('betabutton').style.top = deltaY + "px";
    }
    if($('cat_image')){
        var y2 = $('middleColumn').style.top;
        
        ns4 = (document.layers)? true:false
        ie4 = (document.all)? true:false
        winW = (ns4)? window.innerWidth-16 : document.body.offsetWidth-20;
        if(winW>=784)
            left = Math.round((winW)/2+804/2-177)+6-112;
        else{
            winW = 784;
            left = Math.round((winW)/2+804/2-177)+6-112;
        }
        $('cat_image').style.left = left + "px";
        if(ie4)
            alert($('cat_image').style.top);
    }        

}

function scrollPosition(){
    if($('betabutton')){
        winW = (ns4)? window.innerWidth-16 : document.body.offsetWidth-20;
        //$('betabutton').style.left = (winW-300) + "px";
        deltaY = getScrollY();
        $('betabutton').style.top = deltaY + "px";
    }
}


resizeWaiter = false;
timer = null;

function positionAgain(){
    if(!resizeWaiter){
        resizeWaiter = true;
        timer = setTimeout("actualResize()",10);
    }else{
        clearTimeout(timer);
        timer = setTimeout("actualResize()",50);
    }
}

var mainController = new MainController();
mainController.load('Place');
mainController.load('Auth');
mainController.load('User');
mainController.load('Forum');
function afterLoad(){
    mainController.afterLoad();
    //if($('place_search_q') && $('autocomplete_choices')){
        
    //}
    
}
var getScrollY = function() {
  return window.pageYOffset ||
         (document.documentElement && document.documentElement.scrollTop) ||
         (document.body && document.body.scrollTop);
}

function centerAppear(divId){
    ns4 = (document.layers)? true:false
    ie4 = (document.all)? true:false
    winW = (ns4)? window.innerWidth-16 : document.body.offsetWidth-20;
    d = $(divId).getDimensions();
    left = Math.round((winW-d.width)/2);
    $(divId).style.left = left + "px";
    
//  var x = 200;
  var y = 100;
  
  deltaY = getScrollY();
  y += deltaY;  
  //Element.setStyle(divId,{top:y});
  $(divId).style.top = y + "px";
  
  Effect.Appear(divId,{'duration':0.2});    
}
function msgBox(message, timer)
 {
     
     
  var msgbox = $('infoDiv');
  
    message = message + "<br>&nbsp;<br><center><a href='javascript:;' onclick='hideBox();'>Close</a></center>";
  msgbox.innerHTML = message;
    ns4 = (document.layers)? true:false
    ie4 = (document.all)? true:false
    winW = (ns4)? window.innerWidth-16 : document.body.offsetWidth-20;
    d = $('infoDiv').getDimensions();
    left = Math.round((winW-d.width)/2);
    var img = new Image();
    img.src= "/public/images/loader_ongrey.gif";
    $('infoDiv').style.left = left + "px";

//  var x = 200;
  var y = 200;
  deltaY = getScrollY();
  //alert(getScrollY());
  y += deltaY;
//  Element.setStyle('infoDiv',{left:x});
  //Element.setStyle('infoDiv',{top:y});
  $('infoDiv').style.top = y + "px";
  Effect.Appear('infoDiv',{'duration':0.2});
  if(timer){
      setTimeout("hideBox()",timer);
  }
 }
 function hideBox(message)
 {
  var msgbox = $('infoDiv');
  Element.hide('infoDiv');
 }
    function loadImages(imageUrlArr){
        for(i=0;i<imageUrlArr.length;i++){
            var img = new Image();
            img.src = imageUrlArr[i];
        }
    }
    function log(str){
        var target = 'log';
        if($(target))
            $(target).innerHTML = str + "<br>" + $(target).innerHTML;
        
    }
    
    
function submitForm(formName){
    ns4 = (document.layers)? true:false
    ie4 = (document.all)? true:false
    if(ie4){
        $(formName).submit();
    }

}