window.addEvent('domready', function(){
    if (display != undefined && display == 'signature') changeMethodTab('methodSignature');
});

var spacer = '&#xA0;';

function changeMethodTab( tab)
{
    if (tab == 'methodSignature')
    {
        $('lnk_codeGenerator').removeClass('tabSelected');
        $('lnk_codeGenerator').addClass('tab');
        $('lnk_methodSignature').removeClass('tab');
        $('lnk_methodSignature').addClass('tabSelected');
        $('tab_methodSignature').setStyle('display', 'block');
        $('tab_codeGenerator').setStyle('display', 'none');
    }
    else if (tab == 'codeGenerator')
    {
        $('lnk_codeGenerator').removeClass('tab');
        $('lnk_codeGenerator').addClass('tabSelected');
        $('lnk_methodSignature').removeClass('tabSelected');
        $('lnk_methodSignature').addClass('tab');
        $('tab_methodSignature').setStyle('display', 'none');
        $('tab_codeGenerator').setStyle('display', 'block');
    }
}

function selectMethod()
{
    var method = $('selectMethod').options[$('selectMethod').selectedIndex].value;
    gotoPage(method);
}

function selectStructure()
{
    var structure = $('selectStructure').options[$('selectStructure').selectedIndex].value;
    gotoPage(structure);
}

function gotoPage( name)
{
    if (name == '') return;
    
    var currentUrl  = window.location.href;
    currentUrl = currentUrl.replace(/#.*$/, '');
    currentUrl = currentUrl.replace(/\?.*$/, '');

    if (currentUrl.match(/\w+.xml$/))
        window.location.href = currentUrl.replace(/\w+\.xml$/, name+'.xml');
    else
        window.location.href = currentUrl+name+'.xml';
}

function generateCode(method)
{
    var lang = $('languageSelect').options[$('languageSelect').selectedIndex].value;
    var code = genCode(lang, method);
    
    $('codeSampleDiv').set('html', code);
    $('codeSampleDiv').style.display = 'block';    
}

function genCode(lang, method)
{
    var ret = "";
    
    var params = new Array();
    var paramsAll = $('tab_codeGenerator').getElements('input[id!=void]');
    var isVoid = $defined($('tab_codeGenerator').getElement('input[id=void]'));

    paramsAll.each(function(element){
        var isBool = element.name.match(/^boolean_/);
        if (!isBool || element.checked)
            params.push(element);
    });

    if (method.match(/^(login|logout)$/)) return eval(lang+"_"+method);
    
    switch(lang)
    {
        case 'php5':
        ret = sub_php5(method, params, isVoid);
        break;
       
        case 'phpPear':
        ret = sub_phpPear(method, params, isVoid);
        break;
    
        case 'perl':
        ret = sub_perl(method, params, isVoid);
        break;
    
        case 'python':
        ret = sub_python(method, params, isVoid);
        break;
    
        case 'cSharp':
        ret = sub_cSharp(method, params, isVoid);
        break;

        case 'ror':
        ret = sub_ror(method, params, isVoid);
        break;

        default:
        ret += "<strong style=\"color:red;\">language "+lang+" is not yet implemented !</strong>";
        break;
    }

    return ret;
}

/*
    php5
*/

var php5_header = "<span class=\"codeHead\">&#60;?php</span><br/><br/>try {<br/>" + spacer +
                  "<span class=\"codeVar\">$soap</span> = new SoapClient(<span class=\"codeStr\">\"https://www.ovh.com/soapi/"+wsdlFileRE+"\"</span>);<br/>";

var php5_login  = "<br/>"+ spacer + "<span class=\"codeCom\">//login</span><br/>" + spacer +
                  "<span class=\"codeVar\">$session</span> = <span class=\"codeVar\">$soap</span>->login(" +
                  "<span class=\"codeStr\">\"<span class=\"highlight\">xxxxxx-ovh</span>\"</span>, <span class=\"codeStr\">\"<span class=\"highlight\">******</span>\"</span>," +
                  "<span class=\"codeStr\">\""+language+"\"</span>, <span class=\"codeBool\">false</span>);<br/>"+ spacer + 
                  "echo <span class=\"codeStr\">\"login successfull\\n\"</span>;<br/>";

var php5_logout = "<br/>" + spacer + "<span class=\"codeCom\">//logout</span><br/>" + spacer +
                  "<span class=\"codeVar\">$soap</span>->logout(<span class=\"codeVar\">$session</span>);<br/>" + spacer + 
                  "echo <span class=\"codeStr\">\"logout successfull\\n\"</span>;<br/><br/>";

var php5_footer = "} catch(SoapFault <span class=\"codeVar\">$fault</span>) {<br/>" + spacer +
                  "echo <span class=\"codeVar\">$fault</span>;<br/>}<br/><br/><span class=\"codeHead\">?></span><br/>";

function sub_php5(method, params, isVoid)
{
    var ret = "<br/>" + spacer + "<span class=\"codeCom\">//"+method+"</span><br/>";
    
    if (isVoid)
    {
        ret += spacer + "<span class=\"codeVar\">$soap</span>->"+method+"(";
    }
    else
    {
        ret += spacer + "<span class=\"codeVar\">$result</span> = <span class=\"codeVar\">$soap</span>->"+method+"(";
    }

    var gotSession = 0;

    params.each(function(item, index){
        var val     = item.value;
        var name    = item.name;
 
        if (index) ret += ", ";
 
        if (name=='session')
        {
            ret += '<span class=\"codeVar\">$session</span>';
            gotSession = 1;
        }
        else if (val=='null')
        {
            ret += "<span class=\"codeNull\">"+val+"</span>";
        }
        else if (name.match(/^array_/))
        {
            name = name.replace(/array_/, '');
            ret += "<span class=\"codeVar\">array(\""+val+"\")</span>";
        }
        else if (name.match(/^boolean_/))
        {
            name = name.replace(/boolean_/, '');
            ret += "<span class=\"codeBool\">"+val+"</span>";
        }
        else
        {
            ret += ('<span class=\"codeStr\">\"'+val+'\"</span>');
        }
    });

    ret += ");<br/>";
    ret += spacer + "echo <span class=\"codeStr\">\""+method+" successfull\\n\"</span>;<br/>";
    
    if (!isVoid)
    {
        ret += spacer + "print_r(<span class=\"codeVar\">$result</span>); <span class=\"codeCom\">// your code here ...</span><br/>";
    }

    if (gotSession)
    {
        ret = (php5_header+php5_login+ret+php5_logout+php5_footer);
    }
    else
    {
        ret = (php5_header+ret+php5_footer);
    }

    return ret;
}

/*
    phpPear
*/

var phpPear_header = 
    "<span class=\"codeHead\">&#60;?php</span><br/><br/>" +
    "<span class=\"codeHead\">require</span> <span class=\"codeStr\">'SOAP/Client.php'</span>;<br/><br/>" +
    "<span class=\"codeVar\">$wsdl_url</span> = <span class=\"codeStr\">'https://www.ovh.com/soapi/"+wsdlFileRE+"'</span>;<br/>" +
    "<span class=\"codeVar\">$WSDL</span>     = new SOAP_WSDL(<span class=\"codeVar\">$wsdl_url</span>);<br/>" +
    "<span class=\"codeVar\">$soap</span>   = $WSDL->getProxy();<br/>";

var phpPear_login = 
    "<br/><span class=\"codeCom\">//login</span><br/>"+
    "<span class=\"codeVar\">$session</span> = <span class=\"codeVar\">$soap</span>->login(<span class=\"codeStr\">\"<span class=\"highlight\">xxxxxx-ovh</span>\"</span>, <span class=\"codeStr\">\"<span class=\"highlight\">******</span>\"</span>, <span class=\"codeStr\">\""+language+"\"</span>, <span class=\"codeBool\">false</span>);<br/><br/>"+
    "if(PEAR::isError(<span class=\"codeVar\">$session</span>)) {<br/>"+
    "&#160;echo <span class=\"codeStr\">\"Error : \"</span>.<span class=\"codeVar\">$session</span>->getCode().<span class=\"codeStr\">\" \".</span><span class=\"codeVar\">$session</span>->getMessage();<br/>"+
    "} else {<br/>"+
    "&#160;echo <span class=\"codeStr\">\"login successfull\"</span>;<br/>"+
    "}<br/>";
 
var phpPear_logout = 
    "<br/><span class=\"codeCom\">//logout</span><br/>"+
    "<span class=\"codeVar\">$result</span> = <span class=\"codeVar\">$soap</span>->logout(<span class=\"codeVar\">$session</span>);<br/>"+
    "<br/>if(PEAR::isError(<span class=\"codeVar\">$result</span>)) {<br/>"+
    "&#160;echo <span class=\"codeStr\">\"Error : \"</span>.<span class=\"codeVar\">$result</span>->getCode().<span class=\"codeStr\">\" \"</span>.<span class=\"codeVar\">$result</span>->getMessage();<br/>"+
    "} else {<br/>"+
    "&#160;echo <span class=\"codeStr\">\"logout successfull\"</span>;<br/>"+
    "}<br/>";
    
var phpPear_footer ="<br/><span class=\"codeHead\">?></span><br/>";

function sub_phpPear(method, params, isVoid)
{
    var ret = "<br/><span class=\"codeCom\">//"+method+"</span><br/>";
    ret += "<span class=\"codeVar\">$result</span> = <span class=\"codeVar\">$soap</span>->"+method+"(";

    var gotSession = 0;

    params.each(function(item, index){
        var val     = item.value;
        var name    = item.name;

        if (index) ret += ", ";

        if (name=='session')
        {
            ret += '<span class=\"codeVar\">$session</span>';
            gotSession = 1;
        }
        else if (val=='null')
        {
            ret += "<span class=\"codeNull\">"+val+"</span>";
        }
        else if (name.match(/^array_/))
        {
            name = name.replace(/array_/, '');
            ret += "<span class=\"codeVar\">array(\""+val+"\")</span>";
        }
        else if (name.match(/^boolean_/))
        {
            name = name.replace(/boolean_/, '');
            ret += "<span class=\"codeBool\">"+val+"</span>";
        }
        else
        {
            ret += ('<span class=\"codeStr\">\"'+val+'\"</span>');
        }        
    });

    ret += ");<br/><br/>";
    ret += "if(PEAR::isError(<span class=\"codeVar\">$result</span>)) {<br/>";
    ret += spacer + "echo <span class=\"codeStr\">\"Error : \"</span>.<span class=\"codeVar\">$result</span>->getCode().<span class=\"codeStr\">\" \"</span>.";
    ret += "<span class=\"codeVar\">$result</span>->getMessage();<br/>";
    ret += "} else {<br/>";
    ret += spacer + "echo <span class=\"codeStr\">\""+method+" successfull\"</span>;<br/>";

    if (!isVoid)
    {
        ret += spacer + "print_r(<span class=\"codeVar\">$result</span>); <span class=\"codeCom\">// your code here ...</span><br/>";
    }
    
    ret += "}<br/>";

    if (gotSession)
    {
        ret = (phpPear_header+phpPear_login+ret+phpPear_logout+phpPear_footer);
    }
    else
    {
        ret = (phpPear_header+ret+phpPear_footer);
    }

    return ret;
}

/*
    Perl 
*/

var perl_header = 
    "<span class=\"codeHead\">#!/usr/bin/perl</span><br/><br/>" +
    "<span class=\"codeHead\">use</span> Data::Dumper;<br/>" +
    "<span class=\"codeHead\">use</span> SOAP::Lite<br/>" +
    spacer + "on_fault => sub { my(<span class=\"codeVar\">$soap</span>, <span class=\"codeVar\">$res</span>) = @_; die ref <span class=\"codeVar\">$res</span> ? <span class=\"codeVar\">$res</span>->faultstring : <span class=\"codeVar\">$soap</span>->transport->status; };<br/><br/>" + 
    "my <span class=\"codeVar\">$soap</span> = SOAP::Lite<br/>" +
    spacer + "-> uri(<span class=\"codeStr\">'https://soapi.ovh.com/manager'</span>)<br/>" +
    spacer + "-> proxy(<span class=\"codeStr\">'https://www.ovh.com:1664'</span>);<br/>";

var perl_login =
    "<br/><span class=\"codeCom\">#login</span><br/>"+
    "my <span class=\"codeVar\">$result</span> = <span class=\"codeVar\">$soap</span>->call( <span class=\"codeStr\">'login'</span> => (<span class=\"codeStr\">'<span class=\"highlight\">xxxxxx-ovh</span>'</span>, <span class=\"codeStr\">'<span class=\"highlight\">******</span>'</span>, <span class=\"codeStr\">'" + language + "'</span>, <span class=\"codeNool\">0</span>) );<br/>" +
    "print <span class=\"codeStr\">\"login successfull\\n\"</span>;<br/>" +
    "my <span class=\"codeVar\">$session</span> = <span class=\"codeVar\">$result</span>->result();<br/>";

var perl_logout =
    "<br/><span class=\"codeCom\">#logout</span><br/>"+
    "<span class=\"codeVar\">$soap</span>->call( <span class=\"codeStr\">'logout'</span> => ( <span class=\"codeVar\">$session</span> ) );<br/>" +
    "print <span class=\"codeStr\">\"logout successfull\\n\"</span>;<br/>";
 
function sub_perl(method, params, isVoid)
{
    var ret = "<br/><span class=\"codeCom\">#"+method+"</span><br/>";
    
    if (isVoid)
    {
        ret += "<span class=\"codeVar\">$soap</span>->call( <span class=\"codeStr\">'"+method+"'</span> => (";

    }
    else
    {
        ret += "my <span class=\"codeVar\">$result</span> = <span class=\"codeVar\">$soap</span>->call( <span class=\"codeStr\">'"+method+"'</span> => (";
    }
    
    var gotSession = 0;

    params.each(function(item, index){
        var val     = item.value;
        var name    = item.name;

        if (index) ret += ", ";

        if (name=='session')
        {
            ret += "<span class=\"codeVar\">$session</span>";
            gotSession = 1;
        }
        else if (val=='undef')
        {
            ret += "<span class=\"codeNull\">undef</span>";
        }
        else if (name.match(/^array_/))
        {
            name = name.replace(/array_/, '');
            ret += "<span class=\"codeVar\">[\""+val+"\"]</span>";
        }
        else if (name.match(/^boolean_/))
        {
            name = name.replace(/boolean_/, '');
            val = (val=='true') ? 1 : 0;
            ret += "<span class=\"codeBool\">"+val+"</span>";
        }
        else
        {
            ret += "<span class=\"codeStr\">'"+val+"'</span>";
        }    
    });
    
    ret += ") );<br/>";
    ret += "print <span class=\"codeStr\">\""+method+" successfull\\n\"</span>;<br/>";
    
    if (!isVoid)
    {
        ret += "my <span class=\"codeVar\">$return</span> = <span class=\"codeVar\">$result</span>->result();<br/>";
        ret += "print Dumper <span class=\"codeVar\">$return</span>; <span class=\"codeCom\"># your code here ...</span><br/>";
    }

    if (gotSession)
    {
        ret = (perl_header+perl_login+ret+perl_logout);
    }
    else
    {
        ret = (perl_header+ret);
    }
    
    return ret;
}
   
/*
    Python 
*/

var python_header = 
    "<span class=\"codeHead\">#!/usr/bin/python</span><br/><br/>" +
    "<span class=\"codeHead\">import</span> pprint<br/>"+
    "from SOAPpy <span class=\"codeHead\">import</span> WSDL<br/><br/>" +
    "<span class=\"codeVar\">soap</span> = WSDL.Proxy(<span class=\"codeStr\">'https://www.ovh.com/soapi/"+wsdlFileRE+"'</span>)<br/>";

var python_login =
    "<br/><span class=\"codeCom\">#login</span><br/>"+
    "<span class=\"codeVar\">session</span> = <span class=\"codeVar\">soap</span>.login(<span class=\"codeStr\">'<span class=\"highlight\">xxxxxx-ovh</span>'</span>, <span class=\"codeStr\">'<span class=\"highlight\">******</span>'</span>, <span class=\"codeStr\">'" + language + "'</span>, <span class=\"codeBool\">0</span>)<br/>"+
    "print <span class=\"codeStr\">\"login successfull\"</span><br/>";

var python_logout =
    "<br/><span class=\"codeCom\">#logout</span><br/>"+
    "<span class=\"codeVar\">soap</span>.logout(<span class=\"codeVar\">session</span>)<br/>"+
    "print <span class=\"codeStr\">\"logout successfull\"</span><br/>";


function sub_python(method, params, isVoid)
{
    var ret = "<br/><span class=\"codeCom\">#"+method+"</span><br/>";
    
    if (isVoid)
    {
        ret += "<span class=\"codeVar\">soap</span>."+method+"(";
    }
    else
    {
        ret += "<span class=\"codeVar\">result</span> = <span class=\"codeVar\">soap</span>."+method+"(";
    }
    
    var gotSession = 0;

    params.each(function(item, index){
        var val     = item.value;
        var name    = item.name;
     
        if (index) ret += ", ";
        
        if (name=='session')
        {
            ret += "<span class=\"codeVar\">session</span>";
            gotSession = 1;
        }
        else if (name.match(/^array_/))
        {
            name = name.replace(/array_/, '');
            ret += "<span class=\"codeVar\">['"+val+"']</span>";
        }
        else if (name.match(/^boolean_/))
        {
            name = name.replace(/boolean_/, '');
            val = (val=='true') ? '1' : '0';
            ret += "<span class=\"codeBool\">"+val+"</span>";
        }
        else
        {
            ret += "<span class=\"codeStr\">'"+val+"'</span>";
        }
    });
    
    ret += ")<br/>";
    ret += "print <span class=\"codeStr\">\""+method+" successfull\"</span><br/>";
    
    if (!isVoid)
    {
        ret += "pp = pprint.PrettyPrinter(indent=4)<br/>";
        ret += "pp.pprint(<span class=\"codeVar\">result</span>) <span class=\"codeCom\"># your code here ...</span><br/>";
    }

    if (gotSession)
    {
        ret = (python_header+python_login+ret+python_logout);
    }
    else
    {
        ret = (python_header+ret);
    }

    return ret;
}

/*
    Ruby On Rails
*/

var ror_header =
    "<span class=\"codeHead\">#!/usr/bin/ruby</span><br/><br/>" +
    "<span class=\"codeHead\">require</span> <span class=\"codeStr\">'pp'</span><br/>" +
    "<span class=\"codeHead\">require</span> <span class=\"codeStr\">'soap/wsdlDriver'</span><br/><br/>" +
    "<span class=\"codeVar\">wsdl</span> = <span class=\"codeStr\">'https://www.ovh.com/soapi/"+wsdlFileRE+"'</span><br/>" +
    "<span class=\"codeVar\">soapi</span> = SOAP::WSDLDriverFactory.new(<span class=\"codeVar\">wsdl</span>).create_rpc_driver<br/>";

var ror_login = 
    "<br/><span class=\"codeCom\">#login</span><br/>"+
    "<span class=\"codeVar\">session</span> = <span class=\"codeVar\">soapi</span>.login(<span class=\"codeStr\">'<span class=\"highlight\">xxxxxx-ovh</span>'</span>, <span class=\"codeStr\">'<span class=\"highlight\">******</span>'</span>, <span class=\"codeStr\">'"+language+"'</span>, <span class=\"codeNool\">false</span>)<br/>"+
    "puts <span class=\"codeStr\">\"login successfull\"</span><br/>";

var ror_logout =
    "<br/><span class=\"codeCom\">#logout</span><br/>"+
    "<span class=\"codeVar\">soapi</span>.logout(<span class=\"codeVar\">session</span>);<br/>"+
    "puts <span class=\"codeStr\">\"logout successfull\"</span><br/>";

function sub_ror(method, params, isVoid)
{
    var ret = "<br/><span class=\"codeCom\">#"+method+"</span><br/>";

    if (isVoid)
    {
        ret += "<span class=\"codeVar\">soapi</span>."+method+"(";
    }
    else
    {
        ret += "<span class=\"codeVar\">result</span> = <span class=\"codeVar\">soapi</span>."+method+"(";
    }

    var gotSession = 0;

    params.each(function(item, index){
        var val     = item.value;
        var name    = item.name;
   
        if (index) ret += ", ";
 
        if (name=='session')
        {
            ret += '<span class=\"codeVar\">session</span>';
            gotSession = 1;
        }
        else if (val=='null')
        {
            ret += "<span class=\"codeNull\">"+val+"</span>";
        }
        else if (name.match(/^array_/))
        {
            name = name.replace(/array_/, '');
            ret += "<span class=\"codeVar\">[\""+val+"\"]</span>";
        }
        else if (name.match(/^boolean_/))
        {
            name = name.replace(/boolean_/, '');
            ret += "<span class=\"codeBool\">"+val+"</span>";
        }
        else
        {
            ret += ('<span class=\"codeStr\">\''+val+'\'</span>');
        }
    });

    ret += ")<br/>";
    ret += "puts <span class=\"codeStr\">\""+method+" successfull\"</span><br/>";

    if (!isVoid)
    {
        ret += "pp <span class=\"codeVar\">result</span> <span class=\"codeCom\"># your code here ...</span><br/>";
    }

    if (gotSession)
    {
        ret = (ror_header+ror_login+ret+ror_logout);
    }
    else
    {
        ret = (ror_header+ret);
    }

    return ret;
}

/*
    C# / .NET framework
*/

var cSharp_header = 
    "<span class=\"codeCom\">/*<br/>" +
    spacer + "1) create the web service proxy class using wsdl.exe : $> wsdl.exe http://www.ovh.com/soapi/"+wsdlFileDLW+"<br/>" +
    spacer + "2) add created proxy class managerService.cs and reference System.Web.Services to your project<br/>" +
    spacer + "3) call the web service in your code : managerService soapi = new managerService();<br/>" +
    spacer + "*\/</span><br/><br/>";

var cSharp_login =
    "using System;<br/>" +
    "using System.Collections.Generic;<br/>" +
    "using System.Linq;<br/>" +
    "using System.Text;<br/>" +
    "<br/>" +
    "namespace MyProject<br/>" +
    "{<br/>" +
    spacer + "class Program<br/>" +
    spacer + "{<br/>" +
    spacer + spacer + "static void Main(string[] args)<br/>" +
    spacer + spacer + "{<br/>" +
    spacer + spacer + spacer + "managerService soapi = new managerService();<br/>" +
    "<br/>" +
    spacer + spacer + spacer + "<span class=\"codeCom\">//login</span><br/>"+
    spacer + spacer + spacer + "string <span class=\"codeVar\">session</span> = <span class=\"codeVar\">soapi</span>.login(<span class=\"codeStr\">\"<span class=\"highlight\">xxxxxx-ovh</span>\"</span>, <span class=\"codeStr\">\"<span class=\"highlight\">******</span>\"</span>, <span class=\"codeStr\">\""+language+"\"</span>, <span class=\"codeBool\">false</span>);<br/>";

var cSharp_logout =
    "<br/>" +
    spacer + spacer + spacer + "<span class=\"codeCom\">//logout</span><br/>"+
    spacer + spacer + spacer + "<span class=\"codeVar\">soapi</span>.logout(<span class=\"codeVar\">session</span>);<br/>"+
    spacer + spacer +"}<br/>" +
    "}<br/>";

var cSharp_footer = '';

function sub_cSharp(method, params, isVoid)
{
    var ret = "<br/><span class=\"codeCom\">//"+method+"</span><br/>";

    if (isVoid)
    {
        ret += "<span class=\"codeVar\">soapi</span>."+method+"(";
   }
    else
    {
        ret += method+"Return <span class=\"codeVar\">result</span> = <span class=\"codeVar\">soapi</span>."+method+"(";
    }
    
    var gotSession = 0;

    params.each(function(item, index){
        var val     = item.value;
        var name    = item.name;
     
        if (index) ret += ", ";
        
        if (name=='session')
        {
            ret += "<span class=\"codeVar\">session</span>";
            gotSession = 1;
        }
        else if (val=='null')
        {
            ret += "<span class=\"codeNull\">"+val+"</span>";
        }
        else if (name.match(/^array_/))
        {
            name = name.replace(/boolean_/, '');
            ret += "<span class=\"codeVar\">"+val+"</span>";
        }
        else if (name.match(/^boolean_/))
        {
            name = name.replace(/boolean_/, '');
            ret += "<span class=\"codeBool\">"+val+"</span>";
        }
        else
        {
            ret += "<span class=\"codeStr\">\""+val+"\"</span>";
        }
    });
    
    ret += ");<br/>";

    if (gotSession)
    {
        return (cSharp_header+cSharp_login+ret+cSharp_logout+cSharp_footer);
    }
    else
    {
        return (cSharp_header+ret+cSharp_footer);
    }
}

/*
    Java / Axis2
*/

//TODO

