var isIe;
var languageAlignment;

var communityId = null; // will be set by mainTemplate
var languagePrefix = null; // will be set by mainTemplate
var dynamicUrlPrefix = null; // will be set by mainTemplate

var isLoggedIn = false;


function initKolamon()
{
    // reset isIe
    if (navigator.appName == "Microsoft Internet Explorer"){
        isIe = true;
    } else {
        isIe = false;
    }
}

function getLanguageAlignment(){
    return languageAlignment;
}

function setLanguageAlignment(alignment){
    languageAlignment = alignment;
}

function kolamonEscape(s){
    if (s == null){
        return null;
    } else {
        return s.replace(/'/g, "kkkapostrophekkk").replace(/\r\n/g, "kkknewlinekkk").replace(/\n/g, "kkknewlinekkk").replace(/<script>/g, "#script#").replace(/<\/script>/g, "#script#");
    }
}

function isNull(obj){
    return !isNotNull(obj);
}

function isNotNull(obj){
    return (obj != undefined && obj != null);
}

function isEmpty(obj){
    return (obj == undefined || obj == null || obj == "");
}

function isNotEmpty(obj){
    return !isEmpty(obj);
}

function reloadWindow(){
    location.reload();
}

function getSelectedOption(selectObjId){
    var selectObj = document.getElementById(selectObjId);
    return selectObj.options[selectObj.selectedIndex];
}

function getIndexOfOption(selectObjId, optionName){
    for (var i=0; i<$(selectObjId).length; i++){
        if ($(selectObjId)[i].innerHTML == optionName){
            return i;
        }
    }
    return -1;
}

function addOption(selectObj, text)
{
    var newOption = document.createElement("option");
    newOption.text = text;
    selectObj.options.add(newOption);
}

function autoSelectTextField(inputElement){
    if (isIe){
        var textRange = inputElement.createTextRange();
        textRange.moveStart("character", 0);
        textRange.moveEnd("character", inputElement.value.length-1);
        textRange.select();
    } else {
        inputElement.selectionStart = 0;
        inputElement.selectionEnd = inputElement.value.length;
    }
}

function ignoreEnterKeypress(event){
    return (event==undefined || event.keyCode != 13);
}

function getElementByAttr(attrValue){
    var mySpans = document.getElementsByTagName('span');
    for (var i=0; i<mySpans.length; i++){
        var myAttrNode = mySpans[i].getAttributeNode('myId');
        if (myAttrNode != null && myAttrNode.value == attrValue){
            return mySpans[i];
        }
    }
    return null;
}

function onEnter(event, myFunction){
    var charCode = getEventCharCode(event);
    if (charCode == 13){
        myFunction();
        return false;
    }
    return true;
}

/////////////////////////
// Prototype Helpers
/////////////////////////

function ajaxRequest(url, params, onCompleteCallback){
    new Ajax.Request(url, {
        method:       'post',
        parameters:   params + "&isAjax=true",
        asynchronous: true,
        onComplete:   onCompleteCallback
    });
}

function ajaxRequestWithEval(url, params){
    new Ajax.Request(url, {
        method:       'post',
        parameters:   params + "&isAjax=true",
        asynchronous: true,
        evalJS:   'force'
    });
}



function ajaxRequestWithForm(url, formId, onCompleteCallback){
    new Ajax.Request(url, {
        method:       'post',
        parameters:   $(formId).serialize(true),
        asynchronous: true,
        onComplete:   onCompleteCallback
    });
}


function ajaxUpdate(targetElementId, url, params){
    new Ajax.Updater(targetElementId, url, {
        method: 'post',
        parameters: params + "&isAjax=true"
    });
}

function ajaxUpdateWithForm(targetElementId, url, formId){
    new Ajax.Updater(targetElementId, url, {
        method: 'post',
        parameters:   $(formId).serialize(true)
    });
}


function getSelectedRadioElement(buttonGroup){
    if (buttonGroup[0]) {
        for (var i=0; i<buttonGroup.length; i++){
            if (buttonGroup[i].checked) {
                return buttonGroup[i];
            }
        }
    } else {
        if (buttonGroup.checked){
            return 0;
        }
    }
    return -1;
}

function getDescendentByNameAttrStartsWith(parentNode, nameAttrPrefix){
    var result = null;
    if (Object.isElement(parentNode)){
        $A(parentNode.descendants()).each(function (node){
            if (node.name!= null && node.name.startsWith(nameAttrPrefix)){
                result = node;
            }
        });
    }
    return result;
}

function getDescendentByAttr(parentNode, attrName, attrValue){
    var result = null;
    if (Object.isElement(parentNode)){
        $A(parentNode.descendants()).each(function (node){
            var nodeAttrValue = eval('node.' + attrName);
            if (nodeAttrValue!= null && nodeAttrValue == attrValue){
                result = node;
            }
        });
    }
    return result;
}

function setRadio(radioObjId){
    $(radioObjId).checked='checked';
}

function getEventCharCode(event){
    var charCode;
    if (isIe){
        charCode = event.keyCode;
    } else {
        charCode = (event.charCode != 0 ? event.charCode : event.keyCode);
    }
    return charCode;
}


function numericValidate(event) {
    var charCode = getEventCharCode(event);
    return (charCode >= 48 && charCode <= 57) || (charCode == 8) || (charCode == 13) || (charCode == 27) || ((charCode >= 33) && (charCode <= 40)) || (charCode == 46);
}

function onCommunityNameChanged(){
    var communityName = document.getElementById('communityNameElementId').value;
    var communityIdElement = document.getElementById('communityIdElementId');
    var reg = new RegExp("[^0-9a-z-]");
    if (!reg.test(communityName)){
        communityIdElement.value = communityName;
    } else {
        communityIdElement.value = "";
    }
}

function clearKolamonMessage(){
    var url = '/' + dynamicUrlPrefix + '/clearKolamonMessage';
    ajaxRequest(url);
}

function isMemberLoggedIn(){
    return memberId
}

//////////
var groupIdToJoinOrLeave = null;
var isJoin = null;
function doYouReallyWantToJoinOrLeaveGroup(arg_groupIdToJoinOrLeave, arg_isJoin, confirmationQuestion){
    if (isLoggedIn){
        groupIdToJoinOrLeave = arg_groupIdToJoinOrLeave;
        isJoin = arg_isJoin;
        kolamonDialog.setButtons({caption: kolamonMessages.getMessage('i18n.ok'), onclick: joinOrLeaveGroup}, {caption: kolamonMessages.getMessage('i18n.cancel'), onclick: kolamonDialog.hide});
        kolamonDialog.setBody(confirmationQuestion + "<br>" + kolamonMessages.getMessage("i18n.areYouSure"));
        kolamonDialog.show();
    } else {
        showIdDialog({description:kolamonMessages.getMessage('i18n.id.commonDescription')});
    }
}

function joinOrLeaveGroup(){
    var url = '/' + dynamicUrlPrefix + '/changeCommunityMemberStatus';
    var params = 'communityId=' + groupIdToJoinOrLeave + '&join=' + isJoin;
    ajaxRequest(url, params, onCompleteJoinOrLeaveGroup);
}

function onCompleteJoinOrLeaveGroup(){
    groupIdToJoinOrLeave = null;
    kolamonDialog.hide();
    location.reload();
}
