﻿function $invoke(action, request, responseProcessor, context) 
{
    var jsonStr = JSON.stringify(request || {});
    
    // Call our Web Service, passing in our JSON params. The error function is called
    // whenever an exception is thrown by the web service (among other times)
    $.ajax({
        type: "POST",
        //url: __serverUrl + '/Registration.asmx/' + action,
        url: '/Registration.asmx/' + action,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        data: jsonStr,
        success: function(msg) 
        {
            __onServiceResponse(responseProcessor, msg, context);
        },
        error: function(xhr, msg, context) 
        {
            __onServiceInvocationError(xhr, msg);
        }
    });
}

function __onServiceInvocationError(xhr, msg, context)
{
    //UNDONE: Review
    var response = JSON.parse(xhr.responseText);
      
    if (response.Message) 
    {
        alert(response.Message);
    }
    else 
    {
        alert('bad');
    }
}



function __onUnauthorizedRequestError()
{
    alert('Unauthorized request.');
}


function __onServiceResponse(responseCallback, responseData, context)
{
    if(typeof(responseData.d.Error) != 'undefined' && responseData.d.Error != 0)
    {
        __onUnauthorizedRequestError();
    }
    else if(typeof(responseData.d.Data) != 'undefined')
    {
        responseCallback(responseData.d.Data, context);
    }
    else
    {
        responseCallback(responseData.d, context);
    }
}


/*Select helper*/

function htmlEncode(str)
{
    return str.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
}

var emptyOption = ' - ';

function clearCoupledSelectors(selectors)
{
    for(var i = 0; i < selectors.length; i++)
    {
        clearSelect(selectors[i]);
    }
}

function clearSelect(selectId, withoutEmptyMessage)
{
    var select = $("#" + selectId);
    select.children().remove();
    
    if(!withoutEmptyMessage)
    {
        select.html('<option value=-2>' + htmlEncode(emptyOption) + '</option>');
        select.attr('disabled', true);
    }
}

function fillSelect(items, valuePropertyName, textPropertyName, selectId, defaultOption)
{
    var select = $("#" + selectId);
    select.children('options').remove();
    var options = '';
    
    
    if(!items || !items.length)
    {
        if (defaultOption) {
            select.html('<option value=-2>' + htmlEncode(defaultOption) + '</option>');
        }
        else {
            select.html('<option value=-2>' + htmlEncode(emptyOption) + '</option>');
        }
        select.attr('disabled', true);
        return;
    }
    
    if(defaultOption)
    {
        options = '<option value=-1>' +
                        htmlEncode(defaultOption) +
                  '</option>';
        //htmlEncode('<none>') +
    }
    
    for (var i = 0; i < items.length; i++) 
    {
          options += '<option value=' +
                     items[i][valuePropertyName] + '>' +
                     htmlEncode(items[i][textPropertyName]) + 
                     '</option>';
    }
    
    select.html(options);
    select.removeAttr('disabled')
}

function FillSelectCallback(valuePropertyName, textPropertyName, selectId, defaultOption, onFilled)
{
    return function(items)
           {
              fillSelect(items, valuePropertyName, textPropertyName, selectId, defaultOption)
              
              if(typeof(onFilled) == 'function')
              {
                onFilled(items);
              }
           }
}

/*          Accordeon */

function toggleTab(table)
{
//UNDONE: currently IE only
    var srcElement = event.srcElement;
    
    if(!srcElement)
        return;

    if((srcElement.tagName != 'TD' || !srcElement.parentNode) &&  srcElement.parentNode.className != 'tabTitle')
    {
        return;
    }
    
    var rowIndex = srcElement.parentNode.rowIndex;
    var display = (table.rows[rowIndex + 1].style.display.length == 0) ? 'none' : '';
    showTab('"');
    table.rows[rowIndex + 1].style.display = display;
}

function toggleTeamSitesListVisibl()
{
    var l = $('#lstTeamSites')[0];
    l.style.display = (l.style.display == 'none') ? 'block' : 'none';

    $('#lnkCreateTeamSite')[0].style.display = l.style.display;
    $('#lnkTeamSitesCommand')[0].style.display = 'none';
    //return l.style.display != 'none';
    return  false;
}

function gotoUrl(url)
{
    if(url.indexOf('://', 0) != -1)
        window.location = url;
    else
        window.location = __serverUrl + url;
}

function gotoUrlDelayed(url) {
    setTimeout('gotoUrl(' + url + ')', 10);
}

function disableSelect()
{

    var srcElement = event.srcElement;
    
    if(!srcElement)
        return true;

    if((srcElement.tagName != 'TD' || !srcElement.parentNode) &&  srcElement.parentNode.className != 'tabTitle')
    {
        return true;
    }

    return false;
}



function showTeamSitePopup(html, error, onClick)
{
    var pn = $get('pnTeamDescription');
    
    //UNDONE: use addEvent
    if(typeof(onClick) == 'function')    
        pn.onclick = onClick;
    else
        pn.onclick = null;
    
    //pn.className = 'tsDescr'  + (error ? ' err' : '');
        
    pn.innerHTML = html;
    pn.style.display = 'block';
}

function clearAllSelectors()
{
    clearCoupledSelectors(['slClubs', 'slCities', 'slClubs']);
}

function hideTeamSiteDetailsPnl()
{
    $get('pnTeamDescription').style.display = 'none';
}


/*      Cookie  */

function getCookie(c_name)
{
  if (document.cookie.length>0)
  {
    c_start=document.cookie.indexOf(c_name + "=");
      
    if (c_start!=-1)
    {
        c_start=c_start + c_name.length+1;
        c_end=document.cookie.indexOf(";",c_start);
        if (c_end==-1) c_end=document.cookie.length;
        return unescape(document.cookie.substring(c_start,c_end));
    }
  }
  
  return "";
}

function setCookie(c_name,value,expiredays)
{
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie=c_name+ "=" 
                            + escape(value)
                            + ";path=/"
                            + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function urlQuery(name) {
    name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if (results == null)
        return "";
    else
        return results[1];
}

$(document).ready(function() {
    var par = '#popup';
    var ind = document.URL.indexOf(par);
    if (ind != -1) {
        OpenPopup('', document.URL.substring(ind + par.length));
    }
})