function $(id) {
    return YAHOO.util.Dom.get(id);
}

function $E(selector) {
    return YAHOO.util.Selector.query(selector, null, true);
}

function $$(selector) {
    return YAHOO.util.Selector.query(selector);
}

function redirect(href) {
    window.location.replace(href);
}

window.onerror = function errorHandler(message, url, line) {
    var params = [];
    params[1]   = 'link='                       + window.location.href;
    params[2]   = 'message='                    + message;
    params[3]   = 'url='                        + url;
    params[4]   = 'line='                       + line;
    params[5]   = 'navigator[product]='         + navigator.product;
    params[6]   = 'navigator[productSub]='      + navigator.productSub;
    params[7]   = 'navigator[vendor]='          + navigator.vendor;
    params[8]   = 'navigator[vendorSub]='       + navigator.vendorSub;
    params[9]   = 'navigator[appName]='         + navigator.appName;
    params[10]  = 'navigator[appCodeName]='     + navigator.appCodeName;
    params[11]  = 'navigator[appVersion]='      + navigator.appVersion;
    params[12]  = 'navigator[appMinorVersion]=' + navigator.appMinorVersion;
    params[13]  = 'navigator[buildID]=+'        + navigator.buildID;
    params[14]  = 'navigator[cookieEnabled]='   + navigator.cookieEnabled;
    params[15]  = 'navigator[cpuClass]='        + navigator.cpuClass;
    params[16]  = 'navigator[oscpu]='           + navigator.oscpu;
    params[17]  = 'navigator[onLine]='          + navigator.onLine;
    params[18]  = 'navigator[platform]='        + navigator.platform;
    params[19]  = 'navigator[userAgent]='       + navigator.userAgent;
    params[20]  = 'navigator[browserLanguage]=' + navigator.browserLanguage;
    params[21]  = 'navigator[systemLanguage]='  + navigator.systemLanguage;
    params[22]  = 'navigator[userLanguage]='    + navigator.userLanguage;
    params[23]  = 'navigator[language]='        + navigator.language;
    params[24]  = 'navigator[securityPolicy]='  + navigator.securityPolicy;

    for(x in navigator.mimeTypes) {
        params.push('navigator[mimeTypes][' + navigator.mimeTypes[x].type + ']=' + navigator.mimeTypes[x].description);
    }

    for(x in navigator.plugins) {
        params.push('navigator[plugins][' + navigator.plugins[x].name + ']=' + navigator.plugins[x].description);
    }

    YAHOO.util.Connect.asyncRequest('POST', uri.root + 'error.php?', null, params.join('&'));
}

YAHOO.namespace('chickadvisor.container');

YAHOO.chickadvisor.container.init = function() {
    YAHOO.chickadvisor.container.loading = new YAHOO.widget.Panel('loadingModule', {
        'width': '240px',
            'constraintoviewport'   : true,
            'fixedcenter'           : true,
            'close'                 : false,
            'draggable'             : false,
            'underlay'              : 'shadow',
            'zindex'                : 1000,
            'modal'                 : true,
            'visible'               : false,
            'effect'                : {
                'effect'    : YAHOO.widget.ContainerEffect.FADE,
                'duration'  : 0.5
            }
        }
    );

    YAHOO.chickadvisor.container.loading.setHeader("Loading, please wait...");
    YAHOO.chickadvisor.container.loading.setBody('<img src="http://us.i1.yimg.com/us.yimg.com/i/us/per/gr/gp/rel_interstitial_loading.gif" />');
    YAHOO.chickadvisor.container.loading.render(document.body);

    YAHOO.chickadvisor.container.message = new YAHOO.widget.SimpleDialog('messageModule', {
        'width'                 : '300px',
        'constraintoviewport'   : true,
        'fixedcenter'           : true,
        'close'                 : true,
        'draggable'             : false,
        'zindex'                : 5,
        'modal'                 : true,
        'visible'               : false,
        'effect'                : {
            'effect'    : YAHOO.widget.ContainerEffect.FADE,
            'duration'  : 0.5
        },
        'buttons'               : [{
            'text'      : 'Ok',
            'isDefault' : true,
            'handler'   : function() {
                this.hide();
            }
        }]
    });

    YAHOO.chickadvisor.container.shareIt = new YAHOO.widget.Dialog('shareItModule', {
        'width'                 : '500px',
        'constraintoviewport'   : true,
        'fixedcenter'           : true,
        'close'                 : true,
        'draggable'             : false,
        'zindex'                : 5,
        'modal'                 : true,
        'visible'               : false,
        'effect'                : {
            'effect'    : YAHOO.widget.ContainerEffect.FADE,
            'duration'  : 0.5
        },
        'buttons'               : [{
            'text'      : 'Send',
            'isDefault' : true,
            'handler'   : function() {
                sendRequest('global', 'shareIt', 'shareItForm');
                this.cancel();
            }
        }, {
            'text'      : 'Cancel',
            'handler'   : function() {
                this.cancel();
            }
        }]
    });

    YAHOO.chickadvisor.container.shareIt.render(document.body);
    YAHOO.util.Dom.removeClass('shareItModule', 'hidden');

    var ShareITLinks = $$('.ShareIT');

    if (ShareITLinks) {
        for (x in ShareITLinks) {
            YAHOO.util.Event.addListener(ShareITLinks[x], 'click', function(e) {
                YAHOO.util.Event.preventDefault(e);
                YAHOO.chickadvisor.container.shareIt.show();
            });
        }
    }

    if ($('loginModule')) {
        YAHOO.chickadvisor.container.login = new YAHOO.widget.Dialog('loginModule', {
            'width'                 : '300px',
            'constraintoviewport'   : true,
            'fixedcenter'           : true,
            'close'                 : true,
            'draggable'             : false,
            'zindex'                : 5,
            'modal'                 : true,
            'visible'               : false,
            'effect'                : {
                'effect'    : YAHOO.widget.ContainerEffect.FADE,
                'duration' : 0.5
            },
            'buttons'               : [{
                'text'      : 'Login',
                'isDefault' : true,
                'handler'   : function() {
                    sendRequest('login', 'authenticate', 'loginModule');
                    this.cancel();
                }
            }, {
                'text'      : 'Become a Member',
                'handler'   : function() {
                    redirect(uri.link + 'register');
                }
            }]
        });

        YAHOO.chickadvisor.container.login.render(document.body);
        YAHOO.util.Dom.removeClass('loginModule', 'hidden');

        loginListener = new YAHOO.util.KeyListener('loginModule', {
            'keys'  : 13
        }, {
            'fn'    : function() {
                sendRequest('login', 'authenticate', 'loginModule');
                YAHOO.chickadvisor.container.login.cancel();
            }
        });

        loginListener.enable();
    }

    if ($('LoveITModule')) {
        YAHOO.chickadvisor.container.loveit = new YAHOO.widget.Dialog('LoveITModule', {
            'width'                 : '300px',
            'constraintoviewport'   : true,
            'fixedcenter'           : true,
            'close'                 : true,
            'draggable'             : false,
            'zindex'                : 5,
            'modal'                 : true,
            'visible'               : false,
            'effect'                : {
                'effect'    : YAHOO.widget.ContainerEffect.FADE,
                'duration'  : 0.5
            },
            'buttons'               : [{
                'text'      : 'Add to my Hotlist',
                'isDefault' : true,
                'handler'   : function() {
                    sendRequest('global', 'LoveIT', 'LoveITForm');
                    this.cancel();
                }
            }, {
                'text'      : 'Cancel',
                'handler'   : function() {
                    this.cancel();
                }
            }]
        });

        YAHOO.chickadvisor.container.loveit.render(document.body);

        var LoveITButtons = $$('.LoveIT');

        if (LoveITButtons) {
            for (x in LoveITButtons) {
                YAHOO.util.Event.addListener(LoveITButtons[x], 'click', function(e) {
                    $E('form[name=LoveITForm] input[type=hidden]').value = YAHOO.util.Event.getTarget(e).parentNode.id;
                    YAHOO.util.Event.preventDefault(e);
                    YAHOO.chickadvisor.container.loveit.show();
                });
            }
        }
    } else {
        var LoveITButtons = $$('.LoveIT');

        if (LoveITButtons) {
            for (x in LoveITButtons) {
                YAHOO.util.Event.addListener(LoveITButtons[x], 'click', function(e) {
                    YAHOO.util.Event.preventDefault(e);
                    message('Error', 'You need to be logged in and have at least one hotlist in your account to use this function');
                });
            }
        }
    }
}

function message(header, body) {
    YAHOO.chickadvisor.container.message.setHeader(header);
    YAHOO.chickadvisor.container.message.setBody(body);
    YAHOO.chickadvisor.container.message.render(document.body);

    YAHOO.chickadvisor.container.message.show();
}

function login(e) {
    YAHOO.util.Event.preventDefault(e);
    YAHOO.chickadvisor.container.login.show();
}

function sendRequest(controller, method, form) {
    var handleSuccess = function(o) {
        YAHOO.chickadvisor.container.loading.hide();

        if (o.responseText !== undefined) {
            eval(o.responseText);
        }
    }

    var handleFail = function(o) {
        YAHOO.chickadvisor.container.loading.hide();
    }

    var callback = {
        'success': handleSuccess,
        'failure': handleFail
    };

    YAHOO.chickadvisor.container.loading.show();

    YAHOO.util.Connect.initHeader('X-SIGNATURE', 'CA-AJAX');
    YAHOO.util.Connect.setForm($E('form[name=' + form + ']'));
    YAHOO.util.Connect.asyncRequest('POST', uri.root + controller + '/' + method, callback);
}

function sendRequestObject(controller, method, data) {
    var handleSuccess = function(o) {
        YAHOO.chickadvisor.container.loading.hide();

        if (o.responseText !== undefined) {
            eval(o.responseText);
        }
    }

    var handleFail = function(o) {
        YAHOO.chickadvisor.container.loading.hide();
    }

    var callback = {
        'success': handleSuccess,
        'failure': handleFail
    };

    YAHOO.chickadvisor.container.loading.show();

    YAHOO.util.Connect.initHeader('X-SIGNATURE', 'CA-AJAX');

    var post = '';
    for (x in data) {
        post = post + x + '=' + data[x] + '&';
    }

    YAHOO.util.Connect.asyncRequest('POST', uri.root + controller + '/' + method, callback, post);
}

YAHOO.util.Event.onDOMReady(function() {
    var CityButton = new YAHOO.widget.Button('CityButton', {
        'type'  : 'menu',
        'menu'  : 'city_id'
    });

    CityButton.getMenu().mouseDownEvent.subscribe(function(ev, args) {
        var opt = args[1].srcElement;
        var url = location.href;

        url = url.replace(uri.root + uri.city + '/', uri.root);

        if (opt.value != 0) {
            url = url.replace(uri.root, uri.root + opt.value + '/');
        }

        redirect(url);
});

    YAHOO.chickadvisor.container.init();

    if ($('loginLink') && $('loginModule')) {
        YAHOO.util.Event.addListener('loginLink', 'click', login);
    }

    if ($('SearchButton')) {
        var SearchButton = new YAHOO.widget.Button('SearchButton');

        SearchButton.addListener('click', function() {
            redirect(uri.link + 'search/text/' + encodeURIComponent($('SearchText').value));
        });

        searchBoxListener = new YAHOO.util.KeyListener('SearchText', {
            'keys'  : 13
        }, {
            'fn'    : function() {
                redirect(uri.link + 'search/text/' + encodeURIComponent($('SearchText').value));
            }
        });

        searchBoxListener.enable();

        YAHOO.util.Event.addListener('SearchText', 'click', function(e) {
            if (this.value == '') {
                this.value = 'Read reviews on ..'
            } else if (this.value == 'Read reviews on ..') {
                this.value = '';
            }
        });

        YAHOO.util.Event.addListener('SearchText', 'blur', function(e) {
            if (this.value == '') {
                this.value = 'Read reviews on ..'
            } else if (this.value == 'Read reviews on ..') {
                this.value = '';
            }
        });
    }
    
    if ($('subscribeButton')) {
        var subscribeButton = new YAHOO.widget.Button('subscribeButton');

        subscribeButton.addListener('click', function() {
            sendRequest('subscribe', 'subscribe', 'subscribeForm');
        });

        YAHOO.util.Event.addListener('subscribeEmail', 'click', function(e) {
        	if (this.value == '') {
                this.value = 'E-mail Address ..';
            } else if (this.value == 'E-mail Address ..') {
                this.value = '';
            }
        });
        YAHOO.util.Event.addListener('subscribeEmail', 'blur', function(e) {
        	if (this.value == '') {
                this.value = 'E-mail Address ..';
            } else if (this.value == 'E-mail Address ..') {
                this.value = '';
            }
        });
    }
});
