/**
 * Enter Compotition in AJAX
 */

/**
 * checkloggedin
 * check whether the user is logged in or not
 *
 * @param anonymous
 */
function checkloggedin(anonymous){
    if(anonymous == 1){
        //$('msg').style.left = '110px';
        //$('msg').style.top = '120px';
        $('msg').style.display = 'block';
    } else {
        $('comp_display').style.display = 'block';
    }
}

/*
function mouseX(evt) {
    if (evt.pageX) return evt.pageX;
    else if (evt.clientX) return evt.clientX + (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
    else return null;
}

function mouseY(evt) {
    if (evt.pageY) return evt.pageY;
    else if (evt.clientY) return evt.clientY + (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
    else return null;
}
*/

/**
 * sendCompetitionForm
 * submit the form via AJAX 
 *
 * @param form
 * @param url
 * @return false - not submit the form directly
 */
function sendCompetitionForm(form, url){

    loadingSendComp();

    var params = [];
 
    var elem = Form.getElements('post');
    
    // get form elements
    for(var i = 0; i < elem.length; i++){
        if(
                elem[i].name != '' && 
                elem[i].name != 'answer' && 
                elem[i].name != 'optin' &&
                elem[i].name != 'over18'
          ){
            if(elem[i].type == 'select-one') // it fixes a problem in IE
                params.push(elem[i].name + '=' + encodeURIComponent(elem[i].options[elem[i].selectedIndex].text));
            else
                params.push(elem[i].name + '=' + encodeURIComponent(elem[i].value));
        }
    }
    
    if(form.over18){
        // get over18
        if(form.over18.checked)
            params.push('over18=y');
        else
            params.push('over18=n');
    }

    // get optin
    if(typeof(form.optin) != 'undefined'){
        if(form.optin.checked)
            params.push('optin=1');
        else
            params.push('optin=');
    }
    else
        params.push('optin=');

    // get the answer
    if(form.answer.length){
        for(var i = 0; i < form.answer.length; i++)
            if(form.answer[i].checked)
                params.push('answer=' +  form.answer[i].value);
    } else {
        // Free answer
        params.push('answer=' +  encodeURIComponent(form.answer.value));
    }
   
   new Ajax.Request(url, {
        method: 'post',
        parameters: params.join('&'),
        onComplete: function(req){
        
            stopLoadingSendComp();

            var resp = req.responseXML.documentElement.firstChild.nodeValue;
            switch(resp){
                case 'already_entered':
                    $('comp_display').innerHTML = '<h1>Whoops!</h1><br/><p>You\'ve already entered this competition, and to be fair we can only allow one entry per user.How about trying another of our great <a href="http://www.handbag.com/competitions_&amp;_offers/competitions_&amp;_offers/channel">competitions</a>?</p>';
                    break;
                case 'no_answer':
                    alert("Please choose an answer for your chance to win.");
                    break;
                case 'less_18':
                    alert("You must be over 18 years old to be able to participate");
                    break; 
                case 'field_missing':
                    alert("Fields are missing. Check every mandatory field is filled in");
                    break;
                case 'err_saving':
                    alert("There was a problem saving your details, please try again later.");
                    break;
                case 'system_error':
                    alert("There was a problem saving your details, please try again later. Remember you can enter each competition only once!");
                    break;
                case 'ok':
                    $('comp_display').innerHTML = '<h1>Your entry has been registered. Best of luck!</h1>';
            }
        }
   }); 

    return false;

}

/**
 * loadingSendComp
 * Show loading text and image
 */
function loadingSendComp(){
    if(!$('loadingComp')){
        var loading = document.createElement('span');
    
        with(loading){
            id = 'loadingComp';
            innerHTML = '<strong>Sending competition...</strong><br /><br /><img src="themes/yyw/images/ajax-loader.gif" />';
        }
        $('comp_display').className = 'compFormWaiting';
        $('divSendComp').appendChild(loading);
    }
}

/**
 * stopLoadingSendComp
 * Destroy loading
 */
function stopLoadingSendComp(){
    $('divSendComp').removeChild($('loadingComp'));
    $('comp_display').className = 'compForm';
}

/**
 * checkNoMoreThan100Words
 *
 * @param textarea - form control
 * @param anonymous - check whether or not is anonymous
 */
function checkNoMoreThan100Words(textarea, anonymous){
   checkloggedin(anonymous);
   if(textarea.value.length > 600)
       textarea.value = textarea.value.substr(0, 600);
}

function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
