A4J.AJAX.onExpired = function(loc, msg) {
    window.location = window.location.href;
};

var misc = {
    inProgress: function(predicate, indicatorName) {
        var vis = (isTrue(predicate) ? 'visible' : 'hidden');
        wl.getElement(indicatorName).style.visibility = vis;
    },
    bodyOnLoad: function() {
        gameStream.onLoad();
    }
};

var message = {
    showEdit: function(event, predicate, id, formName) {
        wl.preventDefault(event);
        
        var editLink = wl.getElement('editLink' + id);
        var editCommandCont = wl.getElement('editCommandCont' + id);
        var edit = wl.getElement(formName + ':edit' + id);
        var msg = wl.getElement(formName + ':msg' + id);
        
        if (isTrue(predicate)) {
            editLink.style.display = 'none';
            editCommandCont.style.display = 'block';
            
            var text = "";
            
            wl.forEach(msg.childNodes, function(e) {
                if (equals(e.nodeType, wl.TEXT_NODE)) {
                    text += $gt(e);
                } else if (equals(e.nodeType, wl.ELEMENT_NODE) && equals(e.tagName.toLowerCase(), "br")) {
                text += "\n";
            }
        });
        
        $st(edit, text);
        
        msg.style.display = 'none';
        edit.style.display = 'block';
    } else {
    edit.style.display = 'none';
    msg.style.display = 'inline';
    editCommandCont.style.display = 'none';
    editLink.style.display = 'inline';
    $e(formName + ':editLengthError').style.display = 'none';
}
},
saveChanges: function(event, id, formName, editProxyName, indicatorName, length) {
    var edit = wl.getElement(formName + ':edit' + id);
    var proxy = wl.getElement(formName + ':' + editProxyName);
    
    var editValue = edit.value.trim();
    
    if (editValue.isEmpty()) {
        this.showEdit(event, false, id, formName);
        return false;
    } else if (editValue.length > length) {
    return false;
}

misc.inProgress(true, indicatorName);
wl.setText(proxy, wl.getText(edit));
},

showPreview: function(event, formName) {
    wl.preventDefault(event);
    
    var commentError = wl.getElement(formName + ':postMessageError');
    
    if (isNotNull(commentError)) {
        commentError.parentNode.removeChild(commentError);
    }
    
    var root = wl.getElement(formName + ':previewCont');
    var textarea = wl.getElement(formName + ':postMessage');
    
    if (textarea.value.trim().isEmpty()) {
        if (root.style.display === 'block') {
            root.style.display = 'none';
        }
        
        return;
    }
    
    var previewCont = wl.getElement('previewCont:message');
    root.style.display = 'block';
    
    var toRemove = [];
    
    wl.forEach(previewCont.childNodes, function(e) {
        toRemove.push(e);
    });
    
    wl.forEach(toRemove, function(e) {
        previewCont.removeChild(e);
    });
    
    var text = $gt(textarea);
    text = text.replace(/(\r\n)|(\r)/g, "\n");
    
    var lines = text.split("\n");
    
    var self = this;
    wl.forEach(lines, function(line, state) {
        var node = wl.createTextNode(self.convertBlanks(line));
        previewCont.appendChild(node);
        
        if (!state.isLast) {
            previewCont.appendChild(wl.createElement("br"));
        }
    });
},
convertBlanks: function(text) {
    var out = "";
    var wasBlank = false;
    for (var i = 0; i < text.length; i++) {
        var c = text.charAt(i);
        
        if (equals(c, " ")) {
            if (wasBlank) {
                out += "\u00A0";
            } else {
            out += c;
            wasBlank = true;
        }
    } else {
    out += c;
    wasBlank = false;
}
}

return out;
},
checkLength: function(length, textarea, errorId) {
    var error = $e(errorId);
    
    if (isNotNull(textarea, error)) {
        if ($gt(textarea).trim().length > length) {
            $s(error, {display: 'block'});
        } else {
        $s(error, {display: 'none'});
    }
}
},
validateLength: function(formName, length) {
    var textarea = $e(formName + ':postMessage');
    
    if (isNotNull(textarea)) {
        if (textarea.value.trim().length > length) {
            return false;
        }
    }
    
    return true;
}
};

var wall = {
    showPreview: function(event) {
        wl.preventDefault(event);
        
        var commentError = wl.getElement('wallForm:postMessageError');
        if (isNotNull(commentError)) {
            commentError.parentNode.removeChild(commentError);
        }
        
        var root = wl.getElement('wallForm:previewCont');
        var textarea = wl.getElement('wallForm:postMessage');
        
        if (textarea.value.trim().isEmpty()) {
            if (root.style.display === 'block') {
                root.style.display = 'none';
            }
            
            return;
        }
        
        var previewCont = wl.getElement('previewCont:message');
        root.style.display = 'block';
        
        wl.setText(previewCont, wl.getText(textarea));
    }
};


var gameStream = {
    timer: null,
    upsizing: false,
    
    onLoad: function() {
        
    },
    
    update: function() {
        var pageSizeHidden = $e('gmstreamForm:pageSize');
        var iconCont = $e('gameStream:iconCont');
        
        if (isNull(pageSizeHidden) || isNull(iconCont)) {
            return;
        }
        
        count = 12;
        var maxIcons = 12;
        
        if (count > maxIcons) {
            var toRemove = [];
            
            var cnt = 0;
            wl.forEach(iconCont.childNodes, function(e) {
                if (e.nodeType === wl.ELEMENT_NODE) {
                    cnt++;
                    
                    if (cnt > maxIcons) {
                        toRemove.push(e);
                    }
                }
            });
            
            wl.forEach(toRemove, function(e) {
                iconCont.removeChild(e);
            });
            
            pageSizeHidden.value = maxIcons;
            
            wl.makeRequest({
                method: 'POST',
                url: '/gamestream_update.html',
                params: {
                    'pgsize': maxIcons
                }
            });
            
            
        } else if (count < maxIcons) {
        var updatePageLink = $e('gmstreamForm:updatePageLink');
        
        if (!this.upsizing) {
            this.upsizing = true;
            
            pageSizeHidden.value = maxIcons;
            
            wl.makeRequest({
                method: 'POST',
                url: '/gamestream_update.html',
                params: {
                    'pgsize': maxIcons
                },
                onreceive: function(r) {
                    var result = eval("(" + r.responseText + ")");
                    
                    if (isTrue(result.update)) {
                        updatePageLink.onclick(null);
                    }
                }
            });
        }
    }
}
};

var gamePref = {
    favOnClick: function(event, root) {
        var link = wl.forEach(root.childNodes, {
            filter: function(e) {
                return (e.nodeType === wl.ELEMENT_NODE);
            },
            func: function(e) {
                if (e.tagName.toLowerCase() === "a") {
                    return e;
                }
            }
        });
        
        link.onclick(null);
    },
    toGame: function(name) {
        window.location="/game.html?id=" + name;
    },
    
    toGame: function(name, isManage) {
        if (isManage){
            window.location= "/manage_game.html?id=" + name;
        } else {
        window.location="/game.html?id=" + name;
    }
},

toEditGame: function(name) {
    window.location="/manage_game.html?id=" + name;
},

toRecommended: function(name) {
    window.location="/game_recommendation.html?id=" + name;
},
toPriview: function(name) {
    flem.loadFlem(name);
}
};

var signin = {
    checkCookies: function(event) {
        var expires = new Date();
        expires.setTime(expires.getTime() + (60 * 1000));
        
        document.cookie = "pl_test_cookie=test; expires=" + expires.toGMTString();
        
        if (document.cookie.indexOf("pl_test_cookie") === -1) {
            wl.preventDefault(event);
            
            window.alert("It seems your Web browser has cookies turned off. In order to operate, " +
                "Playyoo need to set a cookie on your computer. \nPlease turn them on " +
                "and try to log in again. Refer to your browser's \"help\" facility on " +
                "how to do that.");
            
            return false;
        }
        
        return true;
    }
};


var editon = {
    showPopup: function(event) {
        wl.preventDefault(event);
        
        Richfaces.showModalPanel('editon_popup', {
            left: wl.getCenterWidth(501),
            width: 501,
            top: wl.getCenterHeight(180)
        });
    },
    closePopup: function(event) {
        wl.preventDefault(event);
        
        var error = $e('editonForm:error');
        if (isNotNull(error)) {
            error.parentNode.removeChild(error);
        }
        
        //Richfaces.hideModalPanel('editon_popup');
        document.getElementById("editon_popupContainer").style.visibility = "hidden";
    },
    onComplete: function() {
        misc.inProgress(false, 'editonIndicator');
        var resultHidden = $e('editonForm:resultHidden');
        
        if (isNull(resultHidden)) {
            return;
        }
        
        if (resultHidden.value.trim() === "1") {
            //Richfaces.hideModalPanel('editon_popup');
            document.getElementById("editon_popupContainer").style.visibility = "hidden";
        }
    }
};

var search = {
    inputOnClick: function(elem, msg, color) {
        if (isNull(elem)) {
            return;
        }
        
        if (elem.value.trim() === msg.trim()) {
            elem.value = "";
            elem.style.color = color;
        }
    },
    inputOnBlur: function(elem, msg, color) {
        if (isNull(elem)) {
            return;
        }
        
        if (elem.value.trim().isEmpty()) {
            elem.value = msg.trim();
            elem.style.color = color;
        }
    },
    inputOnKeydown: function(event, buttonId) {
        if (wl.keyPressed(event, wl.VK_ENTER)) {
            wl.preventDefault(event);
            
            var button = $e(buttonId);
            
            if (isNotNull(button)) {
                button.onclick(null);
            }
        }
    },
    onClick: function(event, id, msg) {
        var input = $e(id);
        
        if (isNull(input)) {
            wl.preventDefault(event);
            return;
        }
        
        var text = wl.getText(input).trim();
        if (text.isEmpty()) {
            wl.preventDefault(event);
        } else if (text === msg.trim()) {
        wl.preventDefault(event);
    }
},
againOnClick: function(id, msg, indicatorId) {
    var input = $e(id);
    
    if (isNull(input)) {
        return false;
    }
    
    var text = wl.getText(input).trim();
    if (text.isEmpty()) {
        return false;
    } else if (text === msg.trim()) {
    return false;
}

misc.inProgress(true, indicatorId);

return true;
},
againOnComplete: function(pageTitleHiddenId, indicatorId) {
    var pageTitleHidden = $e(pageTitleHiddenId);
    if (isNotNull(pageTitleHidden)) {
        document.title = $gt(pageTitleHidden);
    }
    
    misc.inProgress(false, indicatorId);
}
};

var whatsThis = {
    active: false,
    
    toggle: function(event, id) {
        wl.preventDefault(event);
        var elem = $e(id);
        
        if (isNull(elem)) {
            return;
        }
        
        if (this.active) {
            elem.style.display = 'none';
            this.active = false;
        } else {
        elem.style.display = 'block';
        this.active = true;
    }
}
};

var mgame = {
    editInfo: {
        showTitleEdit: function(event, pred) {
            wl.preventDefault(event);
            
            var titleCont = $e('titleCont');
            var titleEditCont = $e('titleEditCont');
            var titleInput = $e('gameInfoForm:gameTitleInput');
            
            if (isNull(titleCont, titleEditCont, titleInput)) {
                return;
            }
            
            if (pred) {
                $s(titleCont, {display: 'none'});
                $s(titleEditCont, {display: 'block'});
                titleInput.focus();
            } else {
            $s(titleCont, {display: 'block'});
            $s(titleEditCont, {display: 'none'});
        }
    },
    saveTitleOnClick: function() {
        var title = $e('gameInfoForm:title');
        var titleInput = $e('gameInfoForm:gameTitleInput');
        
        if (isNull(title, titleInput)) {
            return false;
        }
        
        var oldText = wl.getText(title);
        var newText = wl.getText(titleInput);
        
        if (isNull(oldText, newText)) {
            return false;
        }
        
        if (newText.trim().isEmpty()) {
            wl.setText(titleInput, oldText);
            
            this.showTitleEdit(null, false);
            
            return false;
        }
        
        misc.inProgress(true, 'streamIndicator');
        
        return true;
    },
    saveTitleOnComplete: function() {
        var invalidHidden = $e('gameInfoForm:updateTitleInvalid');
        
        if (isNotNull(invalidHidden)) {
            if (!invalidHidden.value.trim().isEmpty()) {
                var titleInput = $e('gameInfoForm:gameTitleInput');
                
                if (isNotNull(titleInput)) {
                    wl.setText(titleInput, invalidHidden.value);
                    titleInput.focus();
                }
            }
        }
        
        misc.inProgress(false, 'streamIndicator');
    },
    onKeyDown: function(event) {
        
        if (wl.keyPressed(event, wl.VK_ENTER)) {
            wl.preventDefault(event);
            
            var link = $e('gameInfoForm:titleSaveChangesLink');
            
            if (isNotNull(link)) {
                link.onclick(null);
            }
        }
    },
    limitDesc: function(length) {
        var input = $e('gameInfoForm:descInput');
        
        if (isNull(input)) {
            return;
        }
        
        $st(input, $gt(input).substring(0, length));
    },
    calcLeft: function(length) {
        var input = $e('gameInfoForm:descInput');
        var descLeft = $e('descLeft');
        var descLeftNum = $e('descLeftNum');
        
        if (isNull(input, descLeft, descLeftNum)) {
            return;
        }
        
        var left = length - input.value.length;
        
        if (left < 0) {
            left = 0;
            $s(descLeft, {color: '#f00'});
        } else {
        $s(descLeft, {color: '#000'});
    }
    descLeftNum.innerHTML = "" + left + "";
},
editDescOnClick: function(event) {
    wl.preventDefault(event);
    
    var descCont = $e('descCont');
    var descEditCont = $e('descEditCont');
    var input = $e('gameInfoForm:descInput');
    var descText = $e('gameInfoForm:descText');
    
    if (isNull(descCont, descEditCont, input)) {
        return;
    }
    
    var text = "";
    
    wl.forEach(descText.childNodes, function(e) {
        if (equals(e.nodeType, wl.TEXT_NODE)) {
            text += $gt(e);
        } else if (equals(e.nodeType, wl.ELEMENT_NODE) && equals(e.tagName.toLowerCase(), "br")) {
        text += "\n";
    }
});

$st(input, text.trim());

$s(descCont, {display: 'none'});
$s(descEditCont, {display: 'block'});
},
saveDescOnClick: function(length) {
    var input = $e('gameInfoForm:descInput');
    
    if (isNotNull(input)) {
        if (input.value.trim().length > length) {
            return false;
        }
    }
    
    return true;
},
saveDescOnComplete: function() {
    var errorHidden = $e('gameInfoForm:descError');
    var input = $e('gameInfoForm:descInput');
    
    if (isNotNull(errorHidden, input)) {
        if (!$gt(errorHidden).trim().isEmpty()) {
            $st(input, $gt(errorHidden));
        }
    }
    
    misc.inProgress(false, 'streamIndicator');
},
diffEditOnClick: function(event) {
    var link = $e('gameInfoForm:difficultyEditLink');
    
    if (isNull(link)) {
        return;
    }
    
    link.onclick(event);
},
changeIconOnClick: function(event) {
    Richfaces.showModalPanel('change_icon', {
        left: wl.getCenterWidth(697),
        width: 697,
        top: wl.getCenterHeight(341)
    });
}
},
showAdvancedMode: function(event, pred) {
    wl.preventDefault(event);
    
    var basicMode = $e('basicMode');
    var advancedMode = $e('advancedMode');
    
    var basicSwitch = $e('basicSwitch');
    var advancedSwitch = $e('advancedSwitch');
    
    if (isNull(basicMode, advancedMode, basicSwitch, advancedSwitch)) {
        return;
    }
    
    if (pred) {
        $s(basicSwitch, {className: ''});
        $s(advancedSwitch, {className: 'selected'});
        
        $s(basicMode, {display: 'none'});
        $s(advancedMode, {display: 'block'});
    } else {
    $s(basicSwitch, {className: 'selected'});
    $s(advancedSwitch, {className: ''});
    
    $s(basicMode, {display: 'block'});
    $s(advancedMode, {display: 'none'});
}
},
upload: {
    UPLOAD_QUERY_URL: "/manage_game_upload_complete.html",
    UPDATE_INTERVAL: 700,
    requestInProgress: false,
    timerId: null,
    
    query: function(obj) {
        var self = this;
        
        this.timerId = window.setInterval(function() {
            if (isTrue(self.requestInProgress)) {
                return;
            }
            
            self.requestInProgress = true;
            
            wl.makeRequest({
                url: self.UPLOAD_QUERY_URL,
                method: 'GET',
                onreceive: function(r) {
                    var result = eval("(" + r.responseText + ")");
                    
                    self.requestInProgress = false;
                    
                    if (isTrue(result.complete) && isNotNull(self.timerId)) {
                        window.clearInterval(self.timerId);
                        self.timerId = null;
                        
                        obj.onuploaded();
                    }
                },
                onerror: function(r) {
                    alert("AJAX Request Failed: " + r.status);
                    
                    self.requestInProgress = false;
                    
                    if (isNotNull(self.timerId)) {
                        window.clearInterval(self.timerId);
                        self.timerId = null;
                    }
                    
                    obj.onfailure();
                }
            });
        }, this.UPDATE_INTERVAL);
    },
    onClick: function(uploadContId, pleaseWaitId, updateLinkId, revertId) {
        var replace = $e(uploadContId);
        var pleaseWait = $e(pleaseWaitId);
        
        if (isNull(replace, pleaseWait)) {
            return;
        }
        
        $s(replace, {display: 'none'});
        $s(pleaseWait, {display: 'block'});
        
        this.query({
            onuploaded: function() {
                var updateLink = $e(updateLinkId);
                
                if (isNotNull(updateLink)) {
                    updateLink.onclick(null);
                }
            },
            onfailure: function() {
                var infoForm = $e(revertId);
                var pleaseWait = $e(pleaseWaitId);
                
                if (isNotNull(infoForm, pleaseWait)) {
                    $s(pleaseWait, {display: 'none'});
                    $s(infoForm, {display: 'block'});
                }
            }
        });
    },
    killQuery: function() {
        window.clearInterval(this.timerId);
        this.timerId = null;
        this.requestInProgress = false;
    }
},
basicInfo: {
    showReplace: function(event, pred) {
        wl.preventDefault(event);
        
        var infoForm = $e('basicInfoForm');
        var replace = $e('basicMode:replace');
        
        if (isNull(infoForm, replace)) {
            return;
        }
        
        if (isTrue(pred)) {
            $s(infoForm, {display: 'none'});
            $s(replace, {display: 'block'});
        } else {
        $s(infoForm, {display: 'block'});
        $s(replace, {display: 'none'});
        
        this.clearUploadInput();
    }
},
uploadOnClick: function() {
    mgame.upload.onClick('basicMode:replace', 'basicMode:replace:pleaseWait', 
        'updateReplaceForm:updateLink', 'basicInfoForm');
},
updateOnComplete: function() {
    var failureHidden = $e('replaceFailureForm:failureHidden');
    
    mgame.upload.killQuery();
    this.clearUploadInput();
    
    if (isNull(failureHidden)) {
        return;
    }
    
    var pleaseWait = $e('basicMode:replace:pleaseWait');
    
    
    if (equals($gt(failureHidden), "true")) {
        var failure = $e('basicMode:replace:failure');
        
        if (isNotNull(pleaseWait, failure)) {
            $s(pleaseWait, {display: 'none'});
            $s(failure, {display: 'block'});
        }
    } else {
    var success = $e('basicMode:replace:success');
    
    if (isNotNull(pleaseWait, success)) {
        $s(pleaseWait, {display: 'none'});
        $s(success, {display: 'block'});
    }
}
},
finishOnClick: function(event) {
    wl.preventDefault(event);
    
    var success = $e('basicMode:replace:success');
    var infoForm = $e('basicInfoForm');
    
    this.clearUploadInput();
    
    if (isNotNull(success, infoForm)) {
        $s(success, {display: 'none'});
        $s(infoForm, {display: 'block'});
    }
},
tryAgainOnClick: function(event) {
    wl.preventDefault(event);
    
    this.clearUploadInput();
    
    var replace = $e('basicMode:replace');
    var failure = $e('basicMode:replace:failure');
    
    if (isNotNull(replace, failure)) {
        $s(failure, {display: 'none'});
        $s(replace, {display: 'block'});
    }
},
clearUploadInput: function() {
    var input = $e('replace_file_input');
    
    if (isNotNull(input)) {
        input.value = "";
    }
}
},
advancedMode: {
    deleteResLink: null,
    showChangeVersion: function(event, pred) {
        wl.preventDefault(event);
        
        var changeVersion = $e('advancedModeVersionForm');
        var infoForm = $e('advancedModeInfoForm');
        var resForm = $e('advancedModeResForm');
        
        if (isNotNull(changeVersion, infoForm, resForm)) {
            if (isTrue(pred)) {
                $s(changeVersion, {display: 'block'});
                $s(infoForm, resForm, {display: 'none'});
            } else {
            $s(changeVersion, {display: 'none'});
            $s(infoForm, resForm, {display: 'block'});
        }
    }
},
showAddUpload: function(event, pred) {
    wl.preventDefault(event);
    
    var infoForm = $e('advancedModeInfoForm');
    var resForm = $e('advancedModeResForm');
    var addUpload = $e('advancedMode:add');
    
    if (isNotNull(infoForm, resForm, addUpload)) {
        if (isTrue(pred)) {
            $s(resForm, infoForm, {display: 'none'});
            $s(addUpload, {display: 'block'});
        } else {
        $s(resForm, infoForm, {display: 'block'});
        $s(addUpload, {display: 'none'});
        
        this.clearUploadInput();
    }
}
},
uploadOnClick: function() {
    mgame.upload.onClick('advancedMode:add', 'advancedMode:add:pleaseWait', 
        'updateAddForm:updateLink', 'advancedModeResForm');
},
updateOnComplete: function() {
    var failureHidden = $e('updateAddForm:failureHidden');
    
    mgame.upload.killQuery();
    this.clearUploadInput();
    
    if (isNull(failureHidden)) {
        return;
    }
    
    var pleaseWait = $e('advancedMode:add:pleaseWait');
    
    
    if (equals($gt(failureHidden), "true")) {
        var failure = $e('advancedMode:add:failure');
        
        if (isNotNull(pleaseWait, failure)) {
            $s(pleaseWait, {display: 'none'});
            $s(failure, {display: 'block'});
        }
    } else {
    var success = $e('advancedMode:add:success');
    
    if (isNotNull(pleaseWait, success)) {
        $s(pleaseWait, {display: 'none'});
        $s(success, {display: 'block'});
    }
}
},
tryAgainOnClick: function(event) {
    wl.preventDefault(event);
    
    var failure = $e('advancedMode:add:failure');
    var add = $e('advancedMode:add');
    
    this.clearUploadInput();
    
    if (isNotNull(failure, add)) {
        $s(failure, {display: 'none'});
        $s(add, {display: 'block'});
    }
},
confirmOnClick: function(event) {
    wl.preventDefault(event);
    
    this.clearUploadInput();
    
    var infoForm = $e('advancedModeInfoForm');
    var success = $e('advancedMode:add:success');
    var resForm = $e('advancedModeResForm');
    
    if (isNotNull(success, resForm, infoForm)) {
        $s(success, {display: 'none'});
        $s(infoForm, resForm, {display: 'block'});
    }
},
deleteResOnClick: function(event, deleteLinkId, resWidth, resHeight) {
    wl.preventDefault(event);
    
    this.deleteResLink = $e(deleteLinkId);
    
    var resForm = $e('advancedModeResForm');
    var deleteResForm = $e('deleteResForm');
    var resWidthCont = $e('deleteResForm:widthCont');
    var resHeightCont = $e('deleteResForm:heightCont');
    var resWidthHidden = $e('advancedModeResForm:deleteResWidthHidden');
    var resHeightHidden = $e('advancedModeResForm:deleteResHeightHidden');
    
    if (isNotNull(resForm, deleteResForm, resWidthCont,
        resHeightCont, resWidthHidden, resHeightHidden)) {
    $st(resWidthCont, resWidth);
    $st(resHeightCont, resHeight);
    
    resWidthHidden.value = resWidth;
    resHeightHidden.value = resHeight;
    
    $s(resForm, {display: 'none'});
    $s(deleteResForm, {display: 'block'});
}
},
deleteResProxyOnClick: function(event) {
    wl.preventDefault(event);
    
    if (isNotNull(this.deleteResLink)) {
        this.deleteResLink.onclick(null);
    }
},
deleteResNoOnClick: function(event) {
    wl.preventDefault(event);
    
    var resForm = $e('advancedModeResForm');
    var deleteResForm = $e('deleteResForm');
    
    if (isNotNull(resForm, deleteResForm)) {
        $s(resForm, {display: 'block'});
        $s(deleteResForm, {display: 'none'});
        
        this.deleteResLink = null;
    }
},
clearUploadInput: function() {
    var input = $e('add_file_input');
    
    if (isNotNull(input)) {
        input.value = "";
    }
}
},
changeIcon: {
    doneOnClick: function(event) {
        wl.preventDefault(event);
        
        var errorCont = $e('uploadErrorCont');
        if (isNotNull(errorCont)) {
            errorCont.innerHTMl = '';
            $s(errorCont, {display: 'none'});
        }
        
        //Richfaces.hideModalPanel('change_icon');
        document.getElementById("change_iconContainer").style.visibility = "hidden";
    },
    uploadOnClick: function() {
        misc.inProgress(true, 'customIconIndicator');
        
        mgame.upload.query({
            onuploaded: function() {
                var input = $e('icon_file_input');
                var link = $e('iconUpdateForm:iconUpdateLink');
                
                if (isNotNull(input, link)) {
                    input.value = '';
                    link.onclick(null);
                }
            },
            onfailure: function() {
                misc.inProgress(false, 'customIconIndicator');
            }
        });
    },
    uploadOnComplete: function() {
        var error = $e('iconUpdateForm:uploadfileMessage');
        var errorHidden = $e('iconUpdateForm:iconUploadErrorHidden');
        var errorCont = $e('uploadErrorCont');
        
        if (isNotNull(errorHidden, errorCont)) {
            if (equals(errorHidden.value.trim(), "true") && isNotNull(error)) {
                errorCont.innerHTML = error.innerHTML;
                $s(errorCont, {display: 'inline'});
            } else {
            errorCont.innerHTMl = '';
            $s(errorCont, {display: 'none'});
        }
    }
    
    misc.inProgress(false, 'customIconIndicator');
}
},
deleteGame: {
    onClick: function() {
        var cont = $e('deleteGameContainer');
        var pleaseWait = $e('delete_game:pleaseWait');
        
        if (isNotNull(cont, pleaseWait)) {
            $s(cont, {display: 'none'});
            $s(pleaseWait, {display: 'block'});
        }
    },
    onComplete: function(where) {
        window.location = where;
    }
},
showDeleteGame: function(event, pred) {
    wl.preventDefault(event);
    
    if (isTrue(pred)) {
        Richfaces.showModalPanel('delete_game',{
            left: wl.getCenterWidth(450),
            width: 450,
            top: wl.getCenterHeight(200)
        });
    } else {
    //Richfaces.hideModalPanel('delete_game');
    document.getElementById("delete_gameContainer").style.visibility = "hidden";
}
}
};

var flem = {
    loadFlem:function(id) {
        url = "/GetFlemIntegrationCode?id=" + id;
        
        wl.makeRequest({
            method: 'GET',
            
            url: '/GetFlemIntegrationCode?id=' + id,
            
            onreceive: function(req) {
                var flemDiv = document.getElementById("flemContainer");
                var flemDivBg = document.getElementById("flemContainerBg");
                var newScript = document.createElement('script');
                newScript.type = "text/javascript";
                newScript.text = req.responseText;
                flemDiv.appendChild (newScript);
                flemDiv.style.visibility = 'visible';
                flemDivBg.style.visibility = 'visible';
            },
            onerror: function(req) {
                alert("AJAX Request Failed: " + req.status);
            }
        });
        
    },
    closeFlem:function(){
        var flemDiv = document.getElementById("flemContainer");
        var flemDivBg = document.getElementById("flemContainerBg");
        
        if (this.hasFlash("flemContent")) {
            document.getElementById("flemContent").innerHTML = "";
        }
        flemDiv.style.visibility = 'hidden';
        flemDivBg.style.visibility = 'hidden';
    },
    hasFlash: function(flashContainerId) {
        var flemContent = $e(flashContainerId);
        var gotFlash = wl.forEach(flemContent.childNodes, function(e) {
            if (isNotNull(e.tagName)) {
                var tagName = e.tagName.toLowerCase();
                if (equals(tagName, "embed") || equals(tagName, "object")) {
                    return true;
                }
            }
        });
        
        if (isTrue(gotFlash)) {
            return true;
        }
        
        return false;
    }
};


var flemValentine = {
    loadFlem:function(id) {
        url = "/GetFlemIntegrationCode?id=" + id;
        
        wl.makeRequest({
            method: 'GET',
            
            url: '/GetValentineFlem?id=' + id,
            
            onreceive: function(req) {
                var flemDiv = document.getElementById("flemContainer");
                var flemDivBg = document.getElementById("flemContainerBg");
                var newScript = document.createElement('script');
                newScript.type = "text/javascript";
                newScript.text = req.responseText;
                flemDiv.appendChild (newScript);
                flemDiv.style.visibility = 'visible';
                flemDivBg.style.visibility = 'visible';
            },
            onerror: function(req) {
                alert("AJAX Request Failed: " + req.status);
            }
        });
        
    },
    closeFlem:function(){
        var flemDiv = document.getElementById("flemContainer");
        var flemDivBg = document.getElementById("flemContainerBg");
        
        if (this.hasFlash("flemContent")) {
            document.getElementById("flemContent").innerHTML = "";
        }
        flemDiv.style.visibility = 'hidden';
        flemDivBg.style.visibility = 'hidden';
    },
    hasFlash: function(flashContainerId) {
        var flemContent = $e(flashContainerId);
        var gotFlash = wl.forEach(flemContent.childNodes, function(e) {
            if (isNotNull(e.tagName)) {
                var tagName = e.tagName.toLowerCase();
                if (equals(tagName, "embed") || equals(tagName, "object")) {
                    return true;
                }
            }
        });
        
        if (isTrue(gotFlash)) {
            return true;
        }
        
        return false;
    }
};


var iconPref = {
    toMemberProfile: function(id) {
        window.location = '/member_profile.html?id=' + id;
    }
};

var mprofile = {
    sendEmail: {
        sending: false,
        titleText: null,
        
        show: function(event, pred) {
            wl.preventDefault(event);
            
            if (isTrue(pred)) {
                Richfaces.showModalPanel('send_email_popup', {
                    left: wl.getCenterWidth(501),
                    width: 501,
                    top: wl.getCenterHeight(260)
                });
            } else {
            //Richfaces.hideModalPanel('send_email_popup');
            document.getElementById("send_email_popupContainer").style.visibility = "hidden";
        }
    },
    validateLength: function(input, length, checkEmpty) {
        var lengthError = $e('emailInputError');
        var emptyError = $e('emailEmptyError');
        
        if (isNull(input, lengthError, emptyError)) {
            return;
        }
        
        var value = input.value.trim();
        
        if (value.length > length) {
            $s(lengthError, {display: 'block'});
            $s(emptyError, {display: 'none'});
            
            return false;
        } else if (checkEmpty && value.isEmpty()) {
        $s(lengthError, {display: 'none'});
        $s(emptyError, {display: 'block'});
        
        return false;
    } else {
    $s(lengthError, {display: 'none'});
    $s(emptyError, {display: 'none'});
}

return true;
},
showSending: function(pred) {
    if (pred) {
        $s($e('sendEmailTitle1'), {display: 'none'});
        $s($e('sendEmailTitle2'), {display: 'block'});
    } else {
    $s($e('sendEmailTitle1'), {display: 'block'});
    $s($e('sendEmailTitle2'), {display: 'none'});
}
},
sendOnClick: function(length) {
    var input = $e('sendEmailForm:emailInput');
    
    if (!this.validateLength(input, length, true)) {
        return false;
    }
    
    if (this.sending) {
        return false;
    }
    
    this.sending = true;
    
    this.showSending(true);
    
    return true;
},
sendOnComplete: function() {
    this.sending = false;
    
    this.showSending(false);
    
    var errorHidden1 = $e('sendEmailForm:errorHidden1');
    var errorHidden2 = $e('sendEmailForm:errorHidden2');
    
    var gotError = wl.forEach([errorHidden1, errorHidden2], function(e) {
        if (equals(e.value.trim(), "true")) {
            return true;
        }
    });
    
    if (isTrue(gotError)) {
        return;
    }
    
    this.show(null, false);
},
cancelOnClick: function(event) {
    wl.preventDefault(event);
    
    this.sending = false;
    this.showSending(false);
    
    var lengthError = $e('emailInputError');
    var emptyError = $e('emailEmptyError');
    var input = $e('sendEmailForm:emailInput');
    
    if (isNotNull(lengthError, emptyError, input)) {
        $s(lengthError, {display: 'none'});
        $s(emptyError, {display: 'none'});
        
        $st(input, "");
    }
    
    this.show(null, false);
}
}
};

var gameRec = {
    selectedCount: 0,
    
    markOnClick: function(elem, buttonId) {
        var button = $e(buttonId);
        
        if (isNull(elem, button)) {
            return;
        }
        
        if (elem.checked) {
            this.selectedCount++;
            
            button.disabled = false;
        } else if (this.selectedCount > 0) {
        this.selectedCount--;
        
        if (this.selectedCount < 1) {
            button.disabled = true;
        }
    }
}
};

var yprofile = {
    aboutYou: {
        formId: "profile:",
        
        showEditAboutYou: function(event, pred) {
            wl.preventDefault(event);
            
            var proxy = $e(this.formId + "aboutmeProxy");
            var editButton = $e(this.formId + "aboutmeEdit");
            
            var textarea = $e(this.formId + "aboutme");
            var submitButton = $e(this.formId + "submitAbout");
            
            if (isNotNull(proxy, editButton, textarea, submitButton)) {
                if (pred) {
                    $s(proxy, editButton, {display: 'none'});
                    $s(textarea, submitButton, {display: 'block'});
                    
                    textarea.focus();
                } else {
                    $s(proxy, editButton, {display: 'block'});
                    $s(textarea, submitButton, {display: 'none'});
                }
            }
        },
        showEditWeb: function(event, pred) {
            wl.preventDefault(event);

            var proxy = $e(this.formId + "webProxy");
            var editButton = $e(this.formId + "webEdit");

            var submitButton = $e(this.formId + "submitWeb");
            var input = $e(this.formId + "web");

            if (isNotNull(proxy, editButton, submitButton, input)) {
                if (pred) {
                    $s(proxy, editButton, {display: 'none'});
                    $s(submitButton, input, {display: 'block'});

                    input.focus();
                } else {
                    $s(proxy, editButton, {display: 'block'});
                    $s(submitButton, input, {display: 'none'});
                }
            }
        },
        showEditNick: function(event, pred) {
            wl.preventDefault(event);

            var proxy = $e(this.formId + "nickProxy");
            var editButton = $e(this.formId + "nickEdit");

            var input = $e(this.formId + "nick");
            var submitButton = $e(this.formId + "submitNick");

            if (isNotNull(proxy, editButton, input, submitButton)) {
                if (pred) {
                    $s(proxy, editButton, {display: 'none'});
                    $s(input, submitButton, {display: 'block'});

                    input.focus();
                } else {
                    $s(proxy, editButton, {display: 'block'});
                    $s(input, submitButton, {display: 'none'});
                }
            }
        },
        onEnterSubmit: function(event, id) {
            if (wl.keyPressed(event, wl.VK_ENTER)) {
                wl.stopPropagation(event);
                wl.preventDefault(event);

                var button = $e(this.formId + id);
                if (isNotNull(button)) {
                    button.click();
                }

                return false;
            }

            return true;
        }
    },
    phone: {
        detectionComplete: function() {
            var input = $e('phoneform:detHidden');
            var complete = $gt(input).trim().toLowerCase();
            
            return equals(complete, "true");
        },
        onDetComplete: function() {
            if (this.detectionComplete()) {
                window.location = '/profile/phone.html';
            }
        },
        showChangeConfirm: function(event, pred) {
            wl.preventDefault(event);
            
            if (isTrue(pred)) {
                Richfaces.showModalPanel('change_phone',{
                    left: wl.getCenterWidth(450),
                    width: 450,
                    top: wl.getCenterHeight(200)
                });
            } else {
                //Richfaces.hideModalPanel('change_phone');
                document.getElementById("change_phoneContainer").style.visibility = "hidden";
            }
        }
    }
};

var sendGameLink = {
        showDialog: function(event) {
            wl.preventDefault(event);    
           
                Richfaces.showModalPanel('send_game_link',{
                    left: wl.getCenterWidth(450),
                    width: 450,
                    height: 250,
                    top: wl.getCenterHeight(200)
                });
        },
        
        hideDialog: function(event) {
            wl.preventDefault(event);    
            //Richfaces.hideModalPanel('send_game_link'); 
            document.getElementById("send_game_linkContainer").style.visibility = "hidden";
        }
};

var myprofile = {
    aboutYou: {
        formId: "profile:",
        
showEditNick: function(event, pred) {
    wl.preventDefault(event);
    
    var proxy = $e(this.formId + "nickProxy");
    
    var input = $e(this.formId + "nick");

    var activeNick = $e(this.formId + "activeNick");
    
    if (isNotNull(proxy, input, activeNick)) {
        if (pred) {
            $s(proxy,  {display: 'none'});
            $s(input, activeNick, {display: 'block'});
            
            input.focus();
        } else {
            $s(proxy,  {display: 'block'});
            $s(input, activeNick, {display: 'none'});
    }
}
},

showEditShort: function(event, pred) {
    wl.preventDefault(event);
    
    var proxy = $e(this.formId + "shortProxy");
    
    var input = $e(this.formId + "shortName");
    var activeButtons = $e(this.formId + "activeShort");
    
    if (isNotNull(proxy, activeButtons,  input)) {
        if (pred) {
            $s(proxy,  {display: 'none'});
            $s(input, activeButtons, {display: 'block'});
            
            input.focus();
        } else {
            $s(proxy,  {display: 'block'});
            $s(input, activeButtons, {display: 'none'});
    }
}
},

showEditReal: function(event, pred) {
    wl.preventDefault(event);
    
    var proxy = $e(this.formId + "realProxy");
    
    var input = $e(this.formId + "realName");
    var activeButtons = $e(this.formId + "activeReal");
    
    if (isNotNull(proxy, input, activeButtons)) {
        if (pred) {
            $s(proxy,  {display: 'none'});
            $s(input, activeButtons, {display: 'block'});
            
            input.focus();
        } else {
            $s(proxy,  {display: 'block'});
            $s(input, activeButtons, {display: 'none'});
    }
}
},

showEditEmail: function(event, pred) {
    wl.preventDefault(event);
    
    var proxy = $e(this.formId + "emailProxy");
    
    var input = $e(this.formId + "emailText");
    var activeButtons = $e(this.formId + "activeEmail");
    
    if (isNotNull(proxy, activeButtons,  input)) {
        if (pred) {
            $s(proxy,  {display: 'none'});
            $s(input, activeButtons, {display: 'block'});
            
            input.focus();
        } else {
            $s(proxy,  {display: 'block'});
            $s(input, activeButtons, {display: 'none'});
    }
}
},

showEditMobile: function(event, pred) {
    wl.preventDefault(event);
    
        var proxy = $e(this.formId + "mobileProxy");
        var input = $e(this.formId + "mobileText");
        var activeButtons = $e(this.formId + "activeMobile");
    
    if (isNotNull(proxy, input, activeButtons)) {
        if (pred) {
                $s(proxy,  {display: 'none'});
                $s(input, activeButtons, {display: 'block'});
                input.focus();
        } else {
                $s(proxy,  {display: 'block'});
                $s(input, activeButtons, {display: 'none'});
    }
}
},

onEnterSubmit: function(event, id) {
    if (wl.keyPressed(event, wl.VK_ENTER)) {
        wl.stopPropagation(event);
        wl.preventDefault(event);
        
        var button = $e(this.formId + id);
        if (isNotNull(button)) {
            button.click();
        }
        
        return false;
    }
    
    return true;
}
}
};




var inviteFriend = {
    onEnterSubmit: function(event) {
        if (wl.keyPressed(event, wl.VK_ENTER)) {
            wl.stopPropagation(event);
            wl.preventDefault(event);
            
            var button = $e('findFriendsForm:findButton');
            
            if (isNotNull(button)) {
                button.click();
            }
            
            return false;
        }
        
        return true;
    }
};

var vday = {
    anonCheck: function(init) {
        var anonInput = $e('infoForm:anonCheck');
        var fromInput = $e('infoForm:fromInput');
        
        if (isNotNull(anonInput, fromInput)) {
            if (!init) {
                $st(fromInput, "");
            }
            fromInput.disabled = anonInput.checked;
        }
    },
    countryCheck: function() {
        var select = $e('infoForm:countrySelect');
        var numberInput = $e('infoForm:phoneNumberInput');
        
        var selected = wl.forEach(select.childNodes, {
            filter: function(e) {
                if (equals(e.nodeType, wl.ELEMENT_NODE) && equals(e.tagName.toLowerCase(), "option")) {
                    return true;
                }
                
                return false;
            },
            func: function(e) {
                if (equals(e.value.trim(), "-49")) {
                    if (e.selected) {
                        return true;
                    } else {
                    return false;
                }
            }
        }
    });
    
    if (isTrue(selected)) {
        numberInput.disabled = true;
    } else {
    numberInput.disabled = false;
}
},
checkMessageLength: function(inputId, lengthErrorId, maxLength) {
    var input = $e(inputId);
    var lengthError = $e(lengthErrorId);
    
    var pred = true;
    
    if (isNotNull(input, lengthError)) {
        var style = 'none';
        
        if ($gt(input).trim().length > maxLength) {
            style = 'block';
            pred = false;
        }
        
        $s(lengthError, {display: style});
    }
    
    return pred;
},
designOnClick: function(event, inputId, maxLength) {
    if (!this.checkMessageLength(inputId, maxLength)) {
        wl.preventDefault(event);
    }
},
editMessage: function(id, rowIndex) {
    var msgCont = $e('gamesForm:messageCont' + id);
    var msgEditCont = $e('gamesForm:messageEditCont' + id);
    var textarea = $e('gamesForm:gameRepeat:' + rowIndex + ':messageEditInput');
    
    if (isNotNull(msgCont, msgEditCont, textarea)) {
        var text = "";
        
        wl.forEach(msgCont.childNodes, function(e) {
            if (equals(e.nodeType, wl.TEXT_NODE)) {
                text += $gt(e);
            } else if (equals(e.nodeType, wl.ELEMENT_NODE) && equals(e.tagName.toLowerCase(), "br")) {
            text += "\n";
        }
    });
    
    text = text.trim();
    
    $st(textarea, text);
    $s(msgCont, {display: 'none'});
    $s(msgEditCont, {display: 'block'});
}
},
saveMessageOnClick: function(id, rowIndex, maxLength) {
    var textareaId = 'gamesForm:gameRepeat:' + rowIndex + ':messageEditInput';
    
    if (!this.checkMessageLength(textareaId, 'gamesForm:messageLengthError' + id, maxLength)) {
        return false;
    }
    
    var editHidden = $e('gamesForm:messageEditHidden');
    var textarea = $e(textareaId);
    
    if (isNotNull(editHidden, textarea)) {
        $st(editHidden, $gt(textarea));
    }
    
    return true;
}
};
