var urls = { 
  'base'           : 'http://www.milanin.com/',
  'api_prefix'     : 'members/units/clubincall/',
  'get_call_form'  : 'clubincall_get_callform.php',
  'do_call'        : 'clubincall_do_call.php',
  'sendTxtMessage' : 'clubincall_sendTxtMessage.php',
  'get_settings'   : 'clubincall_get_settingsform.php',
  'post_actions'   : 'clubincall_actions.php',
  'template'       : 'members/_templates/default/',
  'openwrapper'    : 'clubincall_openwrapper.php',
  'pollevents'     : 'clubincall_pollevents.php',
  'tos'            : 'tos/clubincall_tos.php',
  'state'          :'clubincall_state.php'
};

// var xmlHttp=null;
// var xmlHttpAlt=null;
var weekdays={ 1:"Monday",
                     2:"Tuesday",
                     3:"Wednesday",
                     4:"Thursday",
                     5:"Friday",
                     6:"Saturday",
                     7:"Sunday"
                    };
var PollerInterval;

addEvent(window,'load',request_clubincall_link);



function request_clubincall_link(){
  var ai = new AJAXInteraction(
      url+'/'+urls['api_prefix']+urls['get_call_form']+'?getlink&id='+page_owner, render_clubincall_link);
      indicate();
      ai.doGet();
}
function render_clubincall_link(xmldoc){
  var userinfo_table=document.getElementById('userinfo_table');
  if (xmldoc) {
    var enabled=xmldoc.getElementsByTagName("enabled");
    if (enabled.length>0){
      enabled=enabled[0];
    }else{
      enabled=false;
    }
    if (userinfo_table && enabled){
      var accepted=enabled.getAttribute("accepted");
      if (accepted=="true"){
        accepted=true;
      }else{
        accepted=false;
      }
      if (accepted){
        var userinfo_table_tr=createElementAll('clubincall_link_tr','tr');
        var userinfo_table_td=createElementAll('clubincall_link_td','td');
        var trs = userinfo_table.tBodies[0].getElementsByTagName("tr");
//         userinfo_table_td.style.background="url("+enabled.getAttribute("url")+"/_templates/default/contact.jpg) no-repeat";
        userinfo_table_td.innerHTML="<div id=\"clubincall_wrapper\" class=\"clubincall_wrapper\" ><a href=\"javascript:clubincall('"+enabled.getAttribute("id")+"','"+enabled.getAttribute("url")+"')\"><img src=\""+enabled.getAttribute("url")+"/_templates/default/contacter.jpg\"/>Contact<br/> "+enabled.getAttribute("name")+"</a></div>\n";
        userinfo_table_tr.appendChild(userinfo_table_td);
        userinfo_table.tBodies[0].insertBefore(userinfo_table_tr,trs[0]);
      }else{
        openTOS(enabled.getAttribute("id"));
      }
    }
  }else{
    alert("xmldoc Error!");
  }
  indicate();
}
function showCountries(){
  var ai = new AJAXInteraction(
      url+'/'+urls['api_prefix']+urls['get_call_form']+'?prefixes', function(xmldoc) { 
         var body=document.getElementsByTagName('body')[0];
         var countries_list_div=createElementAll('countries_list_div','div');
         countries_list_div.innerHTML="<h3>Click the list to close</h3>";
         var countries=xmldoc.getElementsByTagName('prefix');
         if (countries.length>0){
           var countries_list=createElementAll('countries_list','ul');
           for (var i=0;i<countries.length;i++){
             country=document.createElement('li');
             country.innerHTML=countries[i].getAttribute('country_name')+
               '(+'+countries[i].getAttribute('value')+')';
             if (i<countries.length-1) country.innerHTML=country.innerHTML+', ';
             countries_list.appendChild(country);
           }
           countries_list_div.appendChild(countries_list);
           addEvent(countries_list_div,'click',function(){removeElement(document.getElementById('countries_list_div'))})
           body.appendChild(countries_list_div);
         }
         indicate();
       }
      );
      indicate();
      ai.doGet();
}
function indicate(){
  props=client.getPage();
  indicator=document.getElementById('loading_indicator');
  if (indicator){
    if (document.getElementById('control_panel')){
      indicator.className="loading_indicator_centered";
  //     indicator.style.height=props.pageY*0.8;
  //     indicator.style.width=props.pageW*0.8;
    }else{
      indicator.className="loading_indicator";
    }
  //   alert(indicator.style.display);
    if (indicator.style.display != ""){
      indicator.style.display="";
    }else{
      indicator.style.display='block';
    }
  }
}
var client = { //
    getPage:  function() { 
                var pageWidth = 720; 
                var pageHeight = 576; 
                var scrollArr = this.getScroll(); 
                var winArr = this.getWindow(); 
                pageWidth = winArr.width + scrollArr.left; 
                pageHeight = winArr.height + scrollArr.top; 
                return { 
                  scrollX: scrollArr.left, 
                  scrollY: scrollArr.top, 
                  winW: winArr.width, 
                  winH: winArr.height, 
                  pageW: pageWidth, 
                  pageY: pageHeight 
                }; 
    }, 
    getScroll: function() {
                return { 
                  left: this.scrollLeft(),
                  top: this.scrollTop() 
                }; 
               },
    getWindow: function() {
                return { 
                  width: this.windowWidth(),
                  height: this.windowHeight()
                }; 
               }, 
    scrollLeft: function() { 
                  var xScroll = 0; 
                  if (self.pageXOffset) xScroll = self.pageXOffset; 
                  else if (document.documentElement && document.documentElement.scrollLeft)
                   xScroll = document.documentElement.scrollLeft;
                  else if (document.body) 
                   xScroll = document.body.scrollLeft; 
                  return xScroll; 
                },
    scrollTop: function() { 
                  var yScroll = 0; 
                  if (self.pageYOffset) 
                   yScroll = self.pageYOffset; 
                  else if (document.documentElement && document.documentElement.scrollTop) 
                   yScroll = document.documentElement.scrollTop; 
                  else if (document.body) 
                   yScroll = document.body.scrollTop; return yScroll; 
               },
   windowWidth: function() { 
                  var xWin = 720; 
                  if (self.innerHeight) 
                    xWin = self.innerWidth; 
                  else if (document.documentElement && document.documentElement.clientWidth)
                    xWin = document.documentElement.clientWidth;
                  else if (document.body) 
                    xWin = document.body.clientWidth; 
                  return xWin; 
                }, 
   windowHeight: function() { 
                  var yWin = 576; 
                  if (self.innerHeight) 
                    yWin = self.innerHeight; 
                  else if (document.documentElement && document.documentElement.clientHeight)
                    yWin = document.documentElement.clientHeight;
                  else if (document.body)
                    yWin = document.body.clientHeight; 
                  return yWin; 
                 }
};

function clubincall(id){
  
//   for (prop in props){
//     props+=" "+prop;
//   }
//   alert(props.pageW+"X"+props.pageY);
  
//   if (xmlHttp==null) { xmlHttp=ajaxFunction(); }
  var clubincall_wrapper=document.getElementById("clubincall_wrapper");
  if (!document.getElementById('loading_indicator')){
    loading_indicator=createElementAll('loading_indicator','div');
    loading_indicator_text=createElementAll('loading_indicator_text','div');
    loading_indicator_img=createElementAll('loading_indicator_img','img');
    loading_indicator_img.setAttribute('src',url+"/"+urls['template']+'ajax-loader.gif');
    loading_indicator_text.innerHTML="Loading...";
    loading_indicator_text.appendChild(loading_indicator_img);
    loading_indicator.appendChild(loading_indicator_text);
    var body=document.getElementsByTagName('body');
    body[0].appendChild(loading_indicator);
  }
  if (!document.getElementById('clubincall_dropdown')){
    var clubincall_dropdown=document.createElement('div');
    clubincall_dropdown.id='clubincall_dropdown';
    clubincall_dropdown.className='clubincall_dropdown';
    
    clubincall_wrapper.appendChild(clubincall_dropdown);
  //   alert("calling "+url+'/'+urls['api_prefix']+urls['get_call_form']+'?id='+id+','+sid);
    var ai = new AJAXInteraction(
      url+'/'+urls['api_prefix']+urls['get_call_form']+'?id='+id, render_call_form);
      //url+'/'+urls['api_prefix']+urls['get_call_form']+'?id='+id, render_call_form);
      indicate();
      ai.doGet();
  }else{
    removeElement(document.getElementById('clubincall_dropdown'));
  }
}

function docall(){
  id=document.getElementById('dstid_input').value;
  prefix=document.getElementById('prefixes_select').value;
  number=document.getElementById('caller_input').value;
//   alert("calling" + url+'/'+urls['api_prefix']+urls['do_call']+'?id='+id)
  var ai = new AJAXInteraction(url+'/'+urls['api_prefix']+urls['do_call']+'?id='+id+
      '&prefix='+prefix+'&number='+number, get_call);
  indicate();
  ai.doGet();
}
function do_a_test_call(){
  weekday=document.getElementById('test_form_fs_weekday').value;
  hour=document.getElementById('test_form_fs_hour').value;
  var ai = new AJAXInteraction(url+'/'+urls['api_prefix']+urls['do_call']+'?weekday='+weekday+
      '&hour='+hour, render_test_call);
  indicate();
  ai.doGet();
}
function render_test_call(xmldoc){
  var result = xmldoc.getElementsByTagName('result')[0].childNodes[0].nodeValue;
  if (result==0){
    var test_result_row;
    test_result_row=document.getElementById('test_result_row');
    if (test_result_row){
      removeallchilds(test_result_row);
    }else{
      test_result_row=createElementAll('test_result_row','div');
      tests_wrapper=document.getElementById('tests_wrapper');
      tests_wrapper.appendChild(test_result_row);
    }
  }else{
    alert('Test failed');
  }
  var dst=xmldoc.getElementsByTagName('dst')[0];
  test_result_row.innerHTML="<img src=\""+dst.getAttribute('icon')+"\" alt=\""+dst.getAttribute('name')+"\"/><p>"+
  document.getElementById('test_form_fs_weekday').options[document.getElementById('test_form_fs_weekday').selectedIndex].text+" , "+
  document.getElementById('test_form_fs_hour').options[document.getElementById('test_form_fs_hour').selectedIndex].text+
  "</p><p>"+dst.getAttribute('name')+" is at "+dst.getAttribute('desc')+'</p>';
  indicate();
}
function get_call(xmldoc){
      indicate();
      var result = xmldoc.getElementsByTagName('result')[0].childNodes[0].nodeValue;
      if (result==0){
        openCall(xmldoc);
      }else{
        alert("Failed to setup the call: "+xmldoc.getElementsByTagName('error')[0].childNodes[0].nodeValue);
      }
}
function openTOS(id){
  var props=client.getPage();
  var body=document.getElementsByTagName('body');
  body=body[0];
  var background_div=createElementAll('background_div','div');
  var tos_panel=createElementAll('tos_panel','div');
  background_div.style.height=props.pageY;
  background_div.style.width=props.pageW;
  tos_panel.style.height=props.pageY*0.9;
  var clubincall_dropdown=document.getElementById("clubincall_dropdown");
  body.appendChild(background_div);
  body.appendChild(tos_panel);
  indicate();
  body.style["overflow"]="hidden";
  body.style["height"]=props.pageY;
  if (document.body.scroll){
    alert(document.body.scroll);
    document.body.scroll="no";
  }
  var tos_div=createElementAll('tos_div','div');
  var tos_panel_titlebar=render_titlebar('call_titlebar','closeTOS()');
  tos_panel.appendChild(tos_panel_titlebar);
  tos_panel.appendChild(tos_div);
  var ai = new AJAXInteraction(url+'/'+urls['api_prefix']+urls['tos']+'?id='+id, showTos);
  indicate();
  ai.doGet();
  indicate();
}
function showTos(xmldoc){
  var tos_div=document.getElementById('tos_div');
  var tos_panel=document.getElementById('tos_panel');
  var tos_html=xmldoc.getElementsByTagName('html');
  var accept_button=document.createElement('input');
  accept_button.type='button';
  accept_button.id='accept_tos_button';
  accept_button.value='ACCEPT';
  addEvent(accept_button,'click',processTOS);
  var decline_button=document.createElement('input');
  decline_button.type='button';
  decline_button.id='decline_tos_button';
  decline_button.value='DECLINE';
  addEvent(decline_button,'click',processTOS);
  if (tos_div && tos_html.length>0){
    tos_div.innerHTML=tos_html[0].childNodes[0].nodeValue;
  }
  tos_panel.appendChild(accept_button);
  tos_panel.appendChild(decline_button);
}
function processTOS(e){
  if (!e) var e = window.event;
  if (e.target) var targ = e.target;
  else if (e.srcElement) var targ = e.srcElement;
  if (targ.nodeType == 3) // defeat Safari bug
      targ = targ.parentNode;
  if (targ.id=='accept_tos_button'){
    var accepted='yes';
  } else {
    var accepted='no';
  }
  var ai = new AJAXInteraction(url+'/'+urls['api_prefix']+urls['tos']+'?accepted='+accepted, processedTOS);
  indicate();
  ai.doGet();
}
function processedTOS(xmldoc){
  var message=xmldoc.getElementsByTagName('message');
  if (message.length==1){
    alert(message[0].childNodes[0].nodeValue);
    closeTOS();
  }
}
function showTosLang(lang){
  var en=document.getElementById('tos_text_en');
  var it=document.getElementById('tos_text_it');
  if (lang=='en'){
    en.style.display='block';
    it.style.display='none';
  }else{
    it.style.display='block';
    en.style.display='none';
  }
}
function closeTOS(){
  removeallchilds(document.getElementById('tos_panel'));
  removeElement(document.getElementById('tos_panel'));
  removeElement(document.getElementById('background_div'));
  var body=document.getElementsByTagName('body');
  body=body[0];
  body.style["overflow"]="visible";
  body.style["height"]="100%";
}
function openCall(xmldoc){
  var props=client.getPage();
  var body=document.getElementsByTagName('body');
  body=body[0];
  var background_div=createElementAll('background_div','div');
  var call_panel=createElementAll('call_panel','div');
  background_div.style.height=props.pageY;
  background_div.style.width=props.pageW;
  call_panel.style.height=props.pageY*0.9;
  var clubincall_dropdown=document.getElementById("clubincall_dropdown");
  body.appendChild(background_div);
  body.appendChild(call_panel);
  indicate();
  removeElement(clubincall_dropdown);
  body.style["overflow"]="hidden";
  body.style["height"]=props.pageY;
  if (document.body.scroll){
    alert(document.body.scroll);
    document.body.scroll="no";
  }
  var progress_div=createElementAll('progress_div','div');
  var mysrc=xmldoc.getElementsByTagName('src')[0];
  var mydst=xmldoc.getElementsByTagName('dst')[0];
  var member_div=createElementAll('member_div','div');
  var member_icon=createElementAll('member_icon','img');
  member_icon.setAttribute('src',mydst.getAttribute('icon'));
  var member_name_span=createElementAll('member_name_span','span');
  member_name_span.innerHTML=mydst.getAttribute('name')+
                                " @ "+( mydst.getAttribute('desc').length<1
                                      ? "Voicemail"
                                      : mydst.getAttribute('desc')
                                      );
  member_div.appendChild(member_icon);
  member_div.appendChild(member_name_span);
  progress_span=createElementAll('progress_span','span');
  progress_span.innerHTML=progress_div.innerHTML+"Connecting "+mydst.getAttribute('name')+
                         " to +"+mysrc.getAttribute('number');
  member_div.appendChild(progress_span);
  progress_div.appendChild(member_div);
  var call_panel_titlebar=render_titlebar('call_titlebar','closeCall()');
  call_panel.appendChild(call_panel_titlebar);
  call_panel.appendChild(progress_div);
  
  indicate();
  startEventsPoller();
}
function closeCall(){
  clearInterval(PollerInterval);
  removeallchilds(document.getElementById('call_panel'));
  removeElement(document.getElementById('call_panel'));
  removeElement(document.getElementById('background_div'));
  var body=document.getElementsByTagName('body');
  body=body[0];
  body.style["overflow"]="visible";
  body.style["height"]="100%";
}
// function renderCall(xmldoc)
function render_call_form(xmldoc){
  
  
    indicate();
//    alert('response: '+xmlHttp.responseText);
    var clubincall_dropdown=document.getElementById("clubincall_dropdown");
    if (!clubincall_dropdown) alert("An error has occured");
    var debug = xmldoc.getElementsByTagName('debug');
    var dstid = xmldoc.getElementsByTagName('dstid');
    var mname = xmldoc.getElementsByTagName('name');
    var prefixes = xmldoc.getElementsByTagName('prefix');
    var dstnumber = xmldoc.getElementsByTagName('dstnumber');
    var caller_input=document.createElement('input');
    var dstid_input=document.createElement('input');
    var call_button=document.createElement('input');
    var cancel_button=document.createElement('input');
    var caller_input_label=document.createElement('input');
    var dstnumberspan_pre=document.createElement('span');
    var txtenabled=xmldoc.getElementsByTagName('txt');
    txtenabled=txtenabled.length>0?true:false;
    if (txtenabled){
      var dstnumberspan_post=document.createElement('span');
      dstnumberspan_post.id='dstnumberspan_post';
      dstnumberspan_post.className='dstnumberspan';
      var txt_message_div=createElementAll('txt_message_div','div');
      var txt_message_box=createElementAll('txt_message_box','textarea');
  //     txt_message_box.type='textarea';
      txt_message_box.setAttribute('rows','50');
      txt_message_box.setAttribute('cols','50');
      var txt_message_send=createElementAll('txt_message_send','div');
      txt_message_send.innerHTML='Send';
      addEvent(txt_message_send,'click',sendTxtMessage);
    }
    var callformcontrols=document.createElement('div');
    var prefixes_select=document.createElement('select');
    
    var settings_link=0;
//     if (xmldoc.getElementsByTagName('settings').length>0){
//       settings_id=xmldoc.getElementsByTagName('settings')[0].childNodes[0].nodeValue;
//       var settings_link=document.createElement('a');
//       settings_link.id='settings_link';
//       settings_link.className='settings_link';
//       settings_link.setAttribute('href','javascript:openSettings('+settings_id+')');
//       settings_link.innerHTML="Settings";
//     }
    dstnumberspan_pre.id='dstnumberspan_pre';
    caller_input_label.id='caller_input_label';
    dstid_input.id='dstid_input';
    prefixes_select.id='prefixes_select';
    dstnumberspan_pre.className='dstnumberspan';
    
    caller_input.className='clubincall_dropdown_input';
    prefixes_select.className='clubincall_dropdown_select';
    call_button.setAttribute('type','image');
    call_button.setAttribute('src','/'+urls['template']+'/clubincall-g.png');
    cancel_button.setAttribute('src','/'+urls['template']+'/clubincall-r.png');
    dstid_input.setAttribute('type','hidden');
    call_button.className='clubincall_dropdown_button call_button';
    dstid_input.setAttribute('value',dstid[0].childNodes[0].nodeValue);
    cancel_button.setAttribute('type','image');
    caller_input_label.setAttribute('type','text');
    cancel_button.className='clubincall_dropdown_button cancel_button';
    addEvent(cancel_button, 'click', close_callform);
    addEvent(call_button,'click',docall);
    addEvent(prefixes_select,'change',function () {
                                                  document.getElementById('caller_input_label').setAttribute('value',"+"+document.getElementById('prefixes_select').value); }
      )
//     cancel_button.setAttribute('value','Cancel');
    caller_input_label.setAttribute('value',"+0000");//"+&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp";
    caller_input_label.setAttribute('disabled',"true");
    //caller_input_label.innerHTML="+0000";//"+&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp";
    caller_input_label.className="clubincall_dropdown_input label_button";
    dstnumberspan_pre.innerHTML="Enter <strong>your</strong> <a href=\"javascript:showCountries()\">landline number</a> to send a voice message to "+mname[0].childNodes[0].nodeValue;
//     if (dstnumber[0].childNodes[0].nodeValue!="voicemail") {
//       dstnumberspan_post.innerHTML="You will call "+mname[0].childNodes[0].nodeValue+" @ "+dstnumber[0].childNodes[0].nodeValue;
//     }else{
//       dstnumberspan_post.innerHTML="You will leave a message to "+mname[0].childNodes[0].nodeValue;
//     }
    if (txtenabled){
      dstnumberspan_post.innerHTML='Or click here to send a text message';
      addEvent(dstnumberspan_post,'click',openTxtMessageDiv);
    }
    caller_input.id='caller_input';
    for (i=0;i<prefixes.length;i++){
      option = document.createElement("option");
      option.text=prefixes[i].getAttribute("country_name")+
                  " / "+prefixes[i].getAttribute("value");
      option.value=prefixes[i].getAttribute("value");
      prefixes_select.options[prefixes_select.options.length]=option;
      if (prefixes[i].getAttribute("selected")==1){
        prefixes_select.selectedIndex=i;
        caller_input.value=prefixes[i].getAttribute("last_number");
        caller_input_label.setAttribute('value',"+"+prefixes[i].getAttribute("value"));
      }
    }
    caller_input_label.setAttribute('value',
                "+"+prefixes_select.options[prefixes_select.selectedIndex].value
        );
    if (settings_link!=0)
       clubincall_dropdown.appendChild(settings_link);
    clubincall_dropdown.appendChild(dstnumberspan_pre);
    clubincall_dropdown.appendChild(callformcontrols);
    callformcontrols.appendChild(dstid_input);
    callformcontrols.appendChild(prefixes_select);
    callformcontrols.appendChild(caller_input_label);
    callformcontrols.appendChild(caller_input);
    callformcontrols.appendChild(call_button);
    callformcontrols.appendChild(cancel_button);
    clubincall_dropdown.appendChild(dstnumberspan_post);
    if (txtenabled){
      txt_message_div.appendChild(txt_message_box);
      txt_message_div.appendChild(txt_message_send);
      clubincall_dropdown.appendChild(txt_message_div);
    }
//    alert('response'+xmlHttp.responseText);
}
function openTxtMessageDiv(){
  document.getElementById('txt_message_div').style.display='block';
  removeElement(document.getElementById('dstnumberspan_post'));
}
function sendTxtMessage(tok){
  indicate()
  var xml = '<?xml version="1.0"?>\n' +
          '<clubincall_txt_message>'+
          '<id>'+page_owner+'</id>'+
          '<message>\n'+
          document.getElementById('txt_message_box').value+
          '</message>'+
          (typeof(tok) == 'object'?"":'<tok>'+tok+'</tok>')+
          '</clubincall_txt_message>';
  var ai=new AJAXInteraction(
      url+'/'+urls['api_prefix']+urls['sendTxtMessage'],sentTxtMessage);
  ai.doPost(xml);
}
function sentTxtMessage(xmldoc){
  var result=xmldoc.getElementsByTagName('result');
  result=result[0].childNodes[0].nodeValue;
  if (result=='-1'){
    var tok=xmldoc.getElementsByTagName('tok');
    tok=tok[0].childNodes[0].nodeValue;
    sendTxtMessage(tok);
  }else if (result=='0'){
    messageSentOK();
  }else{
    var msg=xmldoc.getElementsByTagName('message');
    msg=msg[0].childNodes[0].nodeValue;
    messageSentKO(msg);
  }
  indicate();
  return true;
}
function messageSentOK(){
  var txt_message_div=document.getElementById('txt_message_div');
  txt_message_div.innerHTML="The message has been sent.<br/>Thank you!<br/><a href=\"javascript:close_callform()\">Close</a>";
}
function messageSentKO(msg){
  var txt_message_div=document.getElementById('txt_message_div');
  txt_message_div.innerHTML="The message has not been sent:<pre>"+msg+"</pre>.<br/>Sorry!<br/><a href=\"javascript:close_callform()\">Close</a>";
}
function close_callform (){
  var clubincall_dropdown=document.getElementById("clubincall_dropdown");
  removeElement(clubincall_dropdown);
}

function openSettings(id){
  var props=client.getPage();
  var body=document.getElementsByTagName('body');
  body=body[0];
  var background_div=document.createElement('div');
  var control_panel=document.createElement('div');
  background_div.id='background_div';
  control_panel.id='control_panel';
  control_panel.className='control_panel';
  background_div.className='background_div';
  background_div.style.height=props.pageY;
  background_div.style.width=props.pageW;
  control_panel.style.height=props.pageY*0.9;
  var clubincall_dropdown=document.getElementById("clubincall_dropdown");
  body.appendChild(background_div);
  body.appendChild(control_panel);
//   if (xmlHttp==null) { xmlHttp=ajaxFunction(); }
  var ai = new AJAXInteraction(
  url+'/'+urls['api_prefix']+urls['get_settings']+'?id='+id, renderSettings);
  indicate();
  removeElement(clubincall_dropdown);//.style.display='none';
  body.style["overflow"]="hidden";
  body.style["height"]=props.pageY;
  if (document.body.scroll){
    alert(document.body.scroll);
    document.body.scroll="no";
  }
  ai.doGet();
}
function render_titlebar(id,close_handler,settings){
  var titlebar=createElementAll(id,'div');
  var close_link=document.createElement('a');
  close_link.setAttribute('href','javascript:'+close_handler+'');
  close_link.innerHTML='<img alt="Close" class="close_img" src="/'+urls['template']+'close.png" />';
  if (settings)
    titlebar.appendChild(renderSettingsMenu());
  titlebar.appendChild(close_link);
  return titlebar;
}

function renderSettingsMenu (){
  var menu=createElementAll('settings_menu','ul');
  items={'numbers_wrapper':'Numbers',
         'dsts_wrapper'   :'Rules',
         'tests_wrapper'  :'Tests',
         'help_wrapper'   :'Help'
        };
  var default_item='numbers_wrapper';
  for (var key in items){
    var item=document.createElement('li');
    item.id='menu_li_'+key;
    if (key==default_item){
      item.className='settings_menu_li_active'
    }else{
      item.className='settings_menu_li';
    }
    var item_a=document.createElement('a');
    item_a.innerHTML=items[key];
    item_a.setAttribute('href','javascript:openwrapper("'+key+'")');
    item.appendChild(item_a);
    menu.appendChild(item);
  }
  return menu;
}

function openwrapper(wrapper){

  var ai = new AJAXInteraction(
      url+'/'+urls['api_prefix']+urls['openwrapper']+'?wrapper='+wrapper,function () {
//                                                 if (xmlHttp.readyState===4 && 
//                                                     xmlHttp.status == 200) 
//                                                     { 
//                                                       alert(xmlHttp.responseText);
//                                                     }
//                                                 } 
                                                        return;
                                                   }
    );
      ai.doGet();
//       xmlHttp.onreadystatechange = ;
  var settings_wrapper=document.getElementById('settings_wrapper');
  var cur_settings=document.getElementById(wrapper);
  for (var i=0;i<settings_wrapper.childNodes.length;i++){
    var myid=settings_wrapper.childNodes[i].id;
    if (myid){
      if (myid.indexOf('_wrapper')>1){
        if (myid!=wrapper){
          settings_wrapper.childNodes[i].style.display='none';
        }
      }
    }
  }
  cur_settings.style.display='block';
  var ul=document.getElementById('settings_menu');
  for (var li in ul.childNodes){
      if (ul.childNodes[li].id=='menu_li_'+wrapper){
        ul.childNodes[li].className="settings_menu_li_active";
      }else{
        ul.childNodes[li].className="settings_menu_li";
      }
  }
}

function renderSettings(xmldoc){
//   if (xmlHttp.readyState===4){
//     if (xmlHttp.status == 200) {
      indicate();
      var settings_wrapper = document.getElementById('settings_wrapper');
      if (!settings_wrapper)
       settings_wrapper=createElementAll('settings_wrapper','div');
//       alert(xmlHttp.responseText);
//       var xmldoc=xmlHttp.responseXML;
//       if (!xmldoc) alert("nodoc!!!");
      var dsts=xmldoc.getElementsByTagName('dst');
      var numbers=xmldoc.getElementsByTagName('number');
      var activewrapper=xmldoc.getElementsByTagName('activewrapper');
      var helpState=xmldoc.getElementsByTagName('help')[0].getAttribute('state');
      var numbers_wrapper=createElementAll('numbers_wrapper','div');
      var dsts_wrapper=createElementAll('dsts_wrapper','div');
      var tests_wrapper=createElementAll('tests_wrapper','div');
      var help_wrapper=createElementAll('help_wrapper','div');
      
//       var control_panel_toolbar=createElementAll('control_panel_toolbar','div');
      var control_panel_titlebar=render_titlebar('control_panel_titlebar','closeSettings()',true);
      settings_wrapper.appendChild(control_panel_titlebar);
      
      var innumbers_help_div=renderHelpDiv(helpState,'innumbers',"<p>Here you can add, modify or remove the phone numbers were the site visitors can reach you.<br/>The numbers must be entered in starting from <a href=\"javascript:showCountries();\">international dialing prefix</a>,e.g.:<br/>\nItalian <strong>020555555</strong> should be entered <strong>39020555555</strong><br/>\nThe description is what is shown to the visitor.</p>");
        
      numbers_wrapper.appendChild(innumbers_help_div);
      
      for (i=0;i<numbers.length;i++){
        numbers_wrapper.appendChild(renderNumber(numbers[i]));
      }
      var dsts_help_div=renderHelpDiv(helpState,'indsts',
        "This page is where you define the schedule for your numbers or in other words, on which number at what hours and day you can be contacted.<br/>Taking an office schedule as an example, which is open from Monday to Friday at 09:00-18:00, you should select Monday 09:00 on the left and Friday 19:00 on the right.<br/>Assuming you also want to be contacted at home at workdays evenings at 19:00-22:00 and weekends from 12:00 till 14:00 you should define two additional rules:<br/>Monday, 19:00 on the left and Friday 22:00 on the right, for your weekdays<br/> and for the weekends:<br/>Saturday, 12:00 on the left and Sunday,14:00 on the right<br/>"
        );
        dsts_wrapper.appendChild(dsts_help_div);
      for (i=0;i<dsts.length;i++){
        var dst_start_fset=document.createElement('fieldset');
        var dst_start_fset_l=document.createElement('legend');
        dst_start_fset_l.innerHTML="Starting from :";
        var dst_end_fset=document.createElement('fieldset');
        var dst_end_fset_l=document.createElement('legend');
        dst_end_fset_l.innerHTML="Until :";
        var dst_number_fset=document.createElement('fieldset');
        var dst_number_fset_l=document.createElement('legend');
        dst_number_fset_l.innerHTML="Ring this number :";
        var dst_row=document.createElement('div');
        dst_row.className='dst_row';
        var dst_row_label=document.createElement('label');
        dst_row_label.className='dst_row_label';
        dst_row_label.setAttribute('for','wstart_select');
        dst_row_label.innerHTML='Calling rule number '+dsts[i].getAttribute('id');
        
        
        var row_id=dsts[i].getAttribute('id');
        var numbers_select=document.createElement('select');
        numbers_select.id='numbers_select_'+row_id;
        numbers_select.className='numbers_select';
        for (ni=0;ni<numbers.length;ni++){
          var option=document.createElement('option');
          option.text=numbers[ni].getAttribute('value')+'/'+numbers[ni].getAttribute('description');
          option.value=numbers[ni].getAttribute('id');
          if (numbers[ni].getAttribute('id')==dsts[i].getAttribute('nid'))
              option.setAttribute('selected','true');
          numbers_select.options[numbers_select.options.length]=option;
        }
          
        for (j=0;j<dsts[i].childNodes.length;j++){
          var dst_child=dsts[i].childNodes[j];
          switch(dst_child.tagName){
            case 'wstart' :
              var wstart_select=document.createElement('select');
              wstart_select.className='week_select';
              wstart_select.id='wstart_select_'+row_id;
              addEvent(wstart_select,'change',dst_select_update);
              for (var wd in weekdays){
                var option=document.createElement('option');
                option.text=weekdays[wd];
                option.value=wd
                wstart_select.options[wstart_select.options.length]=option;
                if (wd==dst_child.getAttribute('value'))
                    wstart_select.selectedIndex=wd-1;
              }
            break
            case 'wend' :
              var wend_select=document.createElement('select');
              wend_select.className='week_select';
              wend_select.id='wend_select_'+row_id;
              addEvent(wend_select,'change',dst_select_update);
              for (var wd in weekdays){
                var option=document.createElement('option');
                option.text=weekdays[wd];
                option.value=wd
                wend_select.options[wend_select.options.length]=option;
                if (wd==dst_child.getAttribute('value'))
                    wend_select.selectedIndex=wd-1;
              }
            break
            case 'hstart' :
              var hstart_select=document.createElement('select');
              hstart_select.className='hour_select';
              hstart_select.id='hstart_select_'+row_id;
              addEvent(hstart_select,'change',dst_select_update);
              for (var h in range(0,24)){
                var option=document.createElement('option');
                option.text=h+":00";
                option.value=h;
                hstart_select.options[hstart_select.options.length]=option;
                if (h==dst_child.getAttribute('value'))
                    hstart_select.selectedIndex=h;
              }
            break
            case 'hend' :
              var hend_select=document.createElement('select');
              hend_select.className='hour_select';
              hend_select.id='hend_select_'+row_id;
              addEvent(hend_select,'change',dst_select_update);
              for (var h in range(0,24)){
                var option=document.createElement('option');
                option.text=h+":00";
                option.value=h;
                hend_select.options[hend_select.options.length]=option;
                if (h==dst_child.getAttribute('value')){
                    hend_select.selectedIndex=h;
                    
                }
              }
            break  
          }
        }
        dst_row.appendChild(dst_row_label);
        dst_row.appendChild(dst_start_fset);
          dst_start_fset.appendChild(dst_start_fset_l);
          dst_start_fset.appendChild(wstart_select);
          dst_start_fset.appendChild(hstart_select);
        dst_row.appendChild(dst_end_fset);
          dst_end_fset.appendChild(dst_end_fset_l);
          dst_end_fset.appendChild(wend_select);
          dst_end_fset.appendChild(hend_select);
        dst_row.appendChild(dst_number_fset);
          dst_number_fset.appendChild(dst_number_fset_l);
          dst_number_fset.appendChild(numbers_select);
        dst_row.appendChild(renderDstNmbrBtns(row_id,'dst'));
        dsts_wrapper.appendChild(dst_row);
      }
      var test_form=createElementAll('test_form','div');
      var test_help_div=renderHelpDiv(helpState,'intests',"Here you can test your rules.<br/>Choose a day of week and hour, click on test to see what of your numbers is selected from the rules."
                  );
      test_form.appendChild(test_help_div);
      var test_form_fs=createElementAll('test_form_fs','fieldset');
      var test_form_fs_l=document.createElement('legend');
      test_form_fs_l.innerHTML="Choose a day/hour combination:";
      var test_form_fs_bl=document.createElement('legend');
      test_form_fs_bl.innerHTML="Click";
      var test_form_bfs=createElementAll('test_form_bfs','fieldset');
      var test_form_fs_weekday=createElementAll('test_form_fs_weekday','select');
      var test_form_fs_hour=createElementAll('test_form_fs_hour','select');
      var test_form_fs_button=createElementAll('test_form_fs_button','input');
      test_form_fs_button.type='button';
      addEvent(test_form_fs_button,'click',do_a_test_call);
      for (var wd in weekdays){
        var option=document.createElement('option');
        option.text=weekdays[wd];
        option.value=wd
        test_form_fs_weekday.options[test_form_fs_weekday.options.length]=option;
      }
      for (var h in range(0,24)){
        var option=document.createElement('option');
        option.text=h+":00";
        option.value=h;
        test_form_fs_hour.options[test_form_fs_hour.options.length]=option;
      }
      test_form_fs_button.value="Test";
      
      var control_panel=document.getElementById('control_panel');
      
      tests_wrapper.appendChild(test_form);
      test_form.appendChild(test_form_fs);
      test_form_fs.appendChild(test_form_fs_weekday);
      test_form_fs.appendChild(test_form_fs_hour);
      test_form_fs.appendChild(test_form_fs_l);
      test_form.appendChild(test_form_bfs);
      test_form_bfs.appendChild(test_form_fs_bl);
      test_form_bfs.appendChild(test_form_fs_button);
      
      
      help_help_div=renderHelpDiv(helpState,'help',
          "<p>The help is on its way here. Currently the feedback has only started to arrive, so it will be really helpful if you send any questions directly to <a href=\"/members/michael.tabolsky\" title=\"Michael Tabolsky\">me</a>.<br/>Thank you!<br/></p>"
        );
      help_wrapper.appendChild(help_help_div);
      
      settings_wrapper.appendChild(numbers_wrapper);
      settings_wrapper.appendChild(dsts_wrapper);
      settings_wrapper.appendChild(tests_wrapper);
      settings_wrapper.appendChild(help_wrapper);
      
//       settings_wrapper.appendChild(render_toolbar('add'));
      control_panel.appendChild(settings_wrapper);
      numbers_wrapper.appendChild(render_toolbar('number'));
      dsts_wrapper.appendChild(render_toolbar('dst'));
      if (activewrapper.length>0){
        activewrapper=activewrapper[0].childNodes[0].nodeValue;
        openwrapper(activewrapper);
      }
        
//     }else{
//       alert("Error getting xmlHttp response: "+xmlHttp.status);
//     }
//   }
}
function renderHelpDiv(helpState,prefix,helptext){
  var help_div=document.createElement('div');
  help_div.id=prefix+'_help_div';
  help_div.className='help_div';
  var help_div_toolbar=document.createElement('div');
  help_div_toolbar.id=prefix+'_help_div_toolbar';
  help_div_toolbar.className='help_div_toolbar';
  help_div_toolbar.innerHTML="<img src=\""+url+"/"+urls['template']+"/help.gif\" onclick=\"showHelp('"+prefix+"') \"alt=\"Show help\"/>\n<img src=\""+url+"/"+urls['template']+"/close.png\" onclick=\"closeHelp('"+prefix+"') \"alt=\"Close help\"/>";
  var help_div_p=document.createElement('div');
  help_div_p.id=prefix+'_help_div_p';
  help_div_p.className='help_div_p';
  if (helpState=='off'){
    help_div_p.style['display']='none';
  }
  help_div_p.innerHTML=helptext;
  help_div.appendChild(help_div_toolbar);
  help_div.appendChild(help_div_p);
  return help_div;
}
function showHelp(prefix){
  var help_div_p=document.getElementById(prefix+'_help_div_p');
  if (help_div_p){
    help_div_p.style['display']='block';
  }
  setState('helpState','on');
}
function closeHelp(prefix){
  var help_div_p=document.getElementById(prefix+'_help_div_p');
  if (help_div_p){
    help_div_p.style['display']='none';
  }
  setState('helpState','off');
}
function setState(state_var,state_val){
  var ai=new AJAXInteraction(url+'/'+urls['api_prefix']+urls['state']+
      '?type=set&var='+state_var+'&state='+state_val);
  ai.doGet();
}
function render_toolbar(suffix){
  var mytoolbar=createElementAll('toolbar_'+suffix,'div');
  var add_button=document.createElement('input');
  add_button.setAttribute('type','button');
  addEvent(add_button,'click',add_handle);
  add_button.setAttribute('value','Add New');
  add_button.className='add_button';
  add_button.id='add_button_'+suffix;
  mytoolbar.appendChild(add_button);
//   mytoolbar.style["margin-top"]=(getElementHeight('control_panel')*0.8);
//   mytoolbar.style.height=(getElementHeight('control_panel')*0.2);
  return mytoolbar;
}
function renderNumberAdd(){
  var number_row=createElementAll('number_row','div');
  var number_row_label=createElementAll('adding_new_label','div');
  number_row_label.innerHTML="Adding New Number :";
  var number_fset=document.createElement('fieldset');
  number_fset.className='number_fset';
  var number_input=document.createElement('input');
  number_input.id='number_input_';
  number_input.className='number_input';
  var number_desc_input=document.createElement('input');
  number_desc_input.className='number_desc_input';
  number_desc_input.id='number_desc_input_';
  number_row.className='number_row';
  number_input.className='number_input';
  number_desc_input.className='number_desc_input';

  var legend=document.createElement('legend');
  legend.innerHTML="Number and Description";
  number_fset.appendChild(legend);
  number_fset.appendChild(number_input);
  number_fset.appendChild(number_desc_input);
  number_row.appendChild(number_row_label);
  number_row.appendChild(number_fset);
  number_row.appendChild(renderDstNmbrBtns(null,'number'));
  
//   numbers_wrapper=document.getElementById('numbers_wrapper');
//   numbers_wrapper.appendChild(number_row);
  return number_row;
}

function getNumbers(xmldoc){
  numbers=xmldoc.getElementsByTagName('number');
  numbers_select=document.getElementById('numbers_select_');
  for (var ni=0;ni<numbers.length;ni++){
    var option=document.createElement('option');
    option.text=numbers[ni].getAttribute('value')+'/'+numbers[ni].getAttribute('description');
    option.value=numbers[ni].getAttribute('id');
    numbers_select.options[numbers_select.options.length]=option;
  }
  indicate();
}

function renderDstAdd(){
    
    var dst_row=document.createElement('div');
    dst_row.className='dst_row';
    dst_row.id='dst_add_row';
    
    var dst_row_label=createElementAll('adding_new_label','div');
    
    var dst_start_fset=document.createElement('fieldset');
    var dst_start_fset_l=document.createElement('legend');
    var dst_end_fset=document.createElement('fieldset');
    var dst_end_fset_l=document.createElement('legend');
    
    var dst_number_fset=document.createElement('fieldset');
    var dst_number_fset_l=document.createElement('legend');
    
    dst_number_fset_l.innerHTML="Ring this number :";
    dst_start_fset_l.innerHTML="Starting from :";
    dst_end_fset_l.innerHTML="Until :";
    dst_row_label.innerHTML="Adding New Rule :";
    
    var numbers_select=document.createElement('select');
    numbers_select.id='numbers_select_';
    numbers_select.className='numbers_select';
    
    var wstart_select=document.createElement('select');
    wstart_select.className='week_select';
    wstart_select.id='wstart_select_';
    for (var wd in weekdays){
      var option=document.createElement('option');
      option.text=weekdays[wd];
      option.value=wd
      wstart_select.options[wstart_select.options.length]=option;
    }
    wstart_select.selectedIndex=0;
    addEvent(wstart_select,'change',dst_select_update);
    
    var wend_select=document.createElement('select');
    wend_select.className='week_select';
    wend_select.id='wend_select_';
    for (var wd in weekdays){
      var option=document.createElement('option');
      option.text=weekdays[wd];
      option.value=wd
      wend_select.options[wend_select.options.length]=option;
    }
    wend_select.selectedIndex=6;
    addEvent(wend_select,'change',dst_select_update);
        
    var hstart_select=document.createElement('select');
    hstart_select.className='hour_select';
    hstart_select.id='hstart_select_';
    for (var h in range(0,24)){
      var option=document.createElement('option');
      option.text=h+":00";
      option.value=h;
      hstart_select.options[hstart_select.options.length]=option;
    }
    hstart_select.selectedIndex=0;
    addEvent(hstart_select,'change',dst_select_update);
    var hend_select=document.createElement('select');
    hend_select.className='hour_select';
    hend_select.id='hend_select_';
    for (var h in range(0,24)){
      var option=document.createElement('option');
      option.text=h+":00";
      option.value=h;
      hend_select.options[hend_select.options.length]=option;
    }
      hend_select.selectedIndex=h;
      addEvent(hend_select,'change',dst_select_update);
    
    dst_row.appendChild(dst_row_label);
    dst_row.appendChild(dst_start_fset);
      dst_start_fset.appendChild(dst_start_fset_l);
      dst_start_fset.appendChild(wstart_select);
      dst_start_fset.appendChild(hstart_select);
    dst_row.appendChild(dst_end_fset);
      dst_end_fset.appendChild(dst_end_fset_l);
      dst_end_fset.appendChild(wend_select);
      dst_end_fset.appendChild(hend_select);
    dst_row.appendChild(dst_number_fset);
      dst_number_fset.appendChild(dst_number_fset_l);
      dst_number_fset.appendChild(numbers_select);
    dst_row.appendChild(renderDstNmbrBtns(null,'dst'));
    return dst_row;
}

function renderNumber(number){
  number_id=number.getAttribute('id');
  number_used=number.getAttribute('used');
  var number_row=createElementAll('number_row','div');
  var number_fset=document.createElement('fieldset');
  number_fset.className='number_fset';
  var number_input=document.createElement('input');
  number_input.id='number_input_'+number_id;
  number_input.className='number_input';
  number_input.value=number.getAttribute('value');
  var number_desc_input=document.createElement('input');
  number_desc_input.value=number.getAttribute('description');
  number_desc_input.className='number_desc_input';
  var number_use=document.createElement('div');
  number_use.className='number_use';
  number_desc_input.id='number_desc_input_'+number_id;
  var number_controls_fset=renderDstNmbrBtns(number_id,'number');
   
  if (number_used>0){
    number_row.className='number_row number_row_used';
    number_input.className='number_input number_input_used';
    number_desc_input.className='number_desc_input number_input_used';
    number_use.innerHTML='The number is in use by '+number_used+' calling rules';
  }else{
    number_row.className='number_row';
    number_input.className='number_input';
    number_desc_input.className='number_desc_input';
    number_use.innerHTML='The number is not in use';
  }
  var legend=document.createElement('legend');
  legend.innerHTML="Number and Description";
  number_fset.appendChild(legend);
  number_fset.appendChild(number_input);
  number_fset.appendChild(number_desc_input);
  number_row.appendChild(number_use);
  number_row.appendChild(number_fset);
  number_row.appendChild(number_controls_fset);
  return number_row;
}

function renderDstNmbrBtns(id,prefix){
  var fieldset=document.createElement('fieldset');
  var save_button=document.createElement('input');
  save_button.setAttribute('type','button');
  addEvent(save_button,'click',save_handle);
  var remove_button=document.createElement('input');
  remove_button.setAttribute('type','button');
  addEvent(remove_button,'click',remove_handle);

  
  save_button.id=prefix+'_save_'+id;
  remove_button.id=prefix+'_remove_'+id;
//   add_button.id=prefix+'_add_'+id;
  
  save_button.className=prefix+'_save_button';
  remove_button.className=prefix+'_remove_button';
//   add_button.className=prefix+'_add_button';
  
  save_button.setAttribute('value','Save');
  remove_button.setAttribute('value','Remove');
//   add_button.setAttribute('value','Add');
  var legend=document.createElement('legend');
  legend.innerHTML="Save or Remove";
  fieldset.appendChild(legend);
  fieldset.appendChild(save_button);
  fieldset.appendChild(remove_button);
//   fieldset.appendChild(add_button);
  
  return fieldset;
}

function save_handle(e){
  if (!e) var e = window.event;
  if (e.target) var targ = e.target;
  else if (e.srcElement) var targ = e.srcElement;
  if (targ.nodeType == 3) // defeat Safari bug
      targ = targ.parentNode;
//   if (xmlHttp==null) xmlHttp=ajaxFunction;
  props=targ.id.split('_');
  var inputs=getAllInputs(targ.parentNode.parentNode);
  var xml = '<?xml version="1.0"?>\n' +
          '<clubincall_action action="save" target="'+props[0]+'" id="'+props[2]+'">\n';
  for (var i=0; i<inputs.length;i++){
    xml += '<control id="'+inputs[i].id+'" value="'+inputs[i].value+'" />'
  }
  xml += '</clubincall_action>';
  var ai=new AJAXInteraction(url+'/'+urls['api_prefix']+urls['post_actions'],buttonXMLPosted);
  indicate();
  ai.doPost(xml);
}
function remove_handle(e){
  if (!e) var e = window.event;
  if (e.target) var targ = e.target;
  else if (e.srcElement) var targ = e.srcElement;
  if (targ.nodeType == 3) // defeat Safari bug
      targ = targ.parentNode;
//   if (xmlHttp==null) xmlHttp=ajaxFunction;
  props=targ.id.split('_');
    var xml = '<?xml version="1.0"?>\n' +
          '<clubincall_action action="remove" target="'+props[0]+'" id="'+props[2]+'">\n';
  xml += '</clubincall_action>';
  var ai=new AJAXInteraction(url+'/'+urls['api_prefix']+urls['post_actions'],buttonXMLPosted);
  indicate();
  ai.doPost(xml);
}

function buttonXMLPosted(xmldoc) {
//   if (xmlHttp.readyState != 4) return;
//   if (xmlHttp.status == 200) {
    
//     var result = xmlHttp.responseXML;
     var result_code=xmldoc.getElementsByTagName('result')[0].childNodes[0].nodeValue;
     var msg=xmldoc.getElementsByTagName('msg')[0].childNodes[0].nodeValue;
//     var dbg=xmldoc.getElementsByTagName('debug')[0].childNodes[0].nodeValue;
    if (result_code!=0){
      alert("Error "+result_code+": \n "+msg);
    }
    removeallchilds(document.getElementById('settings_wrapper'));
    var ai=new AJAXInteraction(url+'/'+urls['api_prefix']+urls['get_settings'], renderSettings);
    ai.doGet();
//     indicate();
//   } else {
//     alert("Error getting xmlHttp response: "+xmlHttp.status);
//     indicate();
//   }
}
function getAllInputs(element){
  var inputs = new Array;
  var input_tags = ['input','select'];
  var input_types = ['text','select-one'];
  for (var tag in input_tags){
    var ginputs=element.getElementsByTagName(input_tags[tag]);
//     alert(input_tags[tag]+'s: '+ginputs.length);
    for ( var i=0 ; i<ginputs.length;i++ ){
//        alert(ginputs[i].type +','+ ginputs[i].id);
      if (typeof(ginputs[i])=="object" && isInArray(input_types,ginputs[i].type) ){
        inputs.push(ginputs[i]);
//          alert("pushed into inputs: "+i);
      }
    }
  }
  return inputs;
}


function add_handle(e){
  if (!e) var e = window.event;
  if (e.target) var targ = e.target;
  else if (e.srcElement) var targ = e.srcElement;
  if (targ.nodeType == 3) // defeat Safari bug
      targ = targ.parentNode;
//   if (xmlHttp==null) xmlHttp=ajaxFunction;
  props=targ.id.split('_');
  switch (props[2]){
    case 'number':
      var add_row=renderNumberAdd();
      break;
    case 'dst':
      indicate();
      add_row=renderDstAdd();
      var ai = new AJAXInteraction( url+'/'+urls['api_prefix']+urls['get_settings'],
                                    getNumbers
                                  );
      ai.doGet();
      break;
  }
  targ.parentNode.insertBefore(add_row,targ);
  targ.setAttribute('disabled','true');
  remove_button=document.getElementById(props[2]+'_remove_null');
  removeEvent(remove_button,'click',remove_handle);
  addEvent(remove_button,'click',removeAddingNew);
}

function removeAddingNew(e){
  if (!e) var e = window.event;
  if (e.target) var remove_button = e.target;
  else if (e.srcElement) var remove_button = e.srcElement;
  if (remove_button.nodeType == 3) // defeat Safari bug
      remove_button = remove_button.parentNode;
  props=remove_button.id.split("_");
  var mytoolbar=document.getElementById('toolbar_'+props[0]);
  var mydiv=mytoolbar.getElementsByTagName('div')[0];
  mytoolbar.removeChild(mydiv);
  
  var add_button=document.getElementById('add_button_'+props[0]);
  add_button.removeAttribute('disabled');
}

function closeSettings(){
  removeallchilds(document.getElementById('control_panel'));
  removeElement(document.getElementById('control_panel'));
  removeElement(document.getElementById('background_div'));
  var body=document.getElementsByTagName('body');
  body=body[0];
  body.style["overflow"]="visible";
  body.style["height"]="100%";
}
 
function dst_select_update(e){
  if (!e) var e = window.event;
  if (e.target) var updated = e.target;
  else if (e.srcElement) var updated = e.srcElement;
  if (updated.nodeType == 3) // defeat Safari bug
      updated = updated.parentNode;
  var id=updated.id.split('_')[2];
  if (updated.id){
    if (updated.id.indexOf('w')==0){
      if (updated.id.indexOf('wstart')==0){
        wend_select=document.getElementById('wend_select_'+id);
        if (updated.value>wend_select.value 
              ||
             (7-updated.value) > wend_select.options.length 
              ||
             (wend_select.options.length == 7 && updated.value>1)
            ){
          var selected_value=wend_select.value;
          wend_select.options.length=0;
          var j=0;
          for (var i=updated.value;i<=7;i++){
            var option=document.createElement('option');
            option.value=i;
            option.text=weekdays[i];
            wend_select.options[wend_select.options.length]=option;
            if (i==selected_value){
              option.selectedIndex=j;
            }
            j++;
          }
        }
      }
      else if (updated.id.indexOf('wend')==0){
        wstart_select=document.getElementById('wstart_select_'+id);
        if (updated.value<wstart_select.value
            ||
            (7-updated.value) < wstart_select.options.length 
          ){
          var selected_value=wstart_select.value;
          wstart_select.options.length=0;
          var j=0;
          for (var i=1;i<=updated.value;i++){
            var option=document.createElement('option');
            option.value=i;
            option.text=weekdays[i];
            wstart_select.options[wstart_select.options.length]=option;
            if (i==selected_value){
              wstart_select.selectedIndex=j;
            }
            j++;
          }
        }
      }
    }else if (updated.id.indexOf('h')==0){
      if (updated.id.indexOf('hstart')==0){
        hend_select=document.getElementById('hend_select_'+id);
        if (updated.value>hend_select.value 
              ||
             (24-updated.value) > hend_select.options.length 
              ||
             (hend_select.options.length == 24 && updated.value>0)
            ){
          var selected_value=hend_select.value;
          hend_select.options.length=0;
          var j=0;
          for (var i=Number(updated.value)+1;i<=23;i++){
            var option=document.createElement('option');
            option.value=i;
            option.text=i+':00';
            hend_select.options[hend_select.options.length]=option;
            if (i==selected_value){
              hend_select.selectedIndex=j;
            }
            j++;
          }
        }
      }
      else if (updated.id.indexOf('hend')==0){
        hstart_select=document.getElementById('hstart_select_'+id);
        if (updated.value < hstart_select.value
            ||
            (24-updated.value) < hstart_select.options.length 
          ){
          var selected_value=hstart_select.value;
          hstart_select.options.length=0;
          var j=0;
          for (var i=0;i<Number(updated.value);i++){
            var option=document.createElement('option');
            option.value=i;
            option.text=text=i+':00';
            hstart_select.options[hstart_select.options.length]=option;
            if (i==selected_value){
              hstart_select.selectedIndex=j;
            }
            j++;
          }
        }
      }
    }
  }
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}
function ajaxFunction(){
 try{ 
   xmlHttp=new XMLHttpRequest();
 }catch (e){
    try {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }catch (e){
      try{
          xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }catch (e){
        alert("Your browser does not support AJAX!");
        return false;
      }
    }
  }
 return xmlHttp;
}
function getAbsPos(el)
{
  //return an element absolute position
  var elmnt=el;
  if(!elmnt) return;
  var pos =new Object;
  //get width and height
  pos.width=elmnt.offsetWidth;
  pos.height=elmnt.offsetHeight;
  //get left and top
  pos.left = 0;
  pos.top = 0;
  /*
          ie 5.0 counts the body as well with the full win width...
          so we need to stop on body
  */
  while(elmnt!=null && elmnt.nodeName!="BODY"){
          pos.left += elmnt.offsetLeft;
          pos.top += elmnt.offsetTop;
          elmnt=elmnt.offsetParent;
  }		
  //right and bottom
  pos.right = (pos.left + pos.width);
  pos.bottom = (pos.top + pos.height);
  return pos;
}
function createElementAll(id,tag){
  var element=document.createElement(tag);
  element.id=id;
  element.className=id;
  return element;
}
function removeElement(el){
  try{
    el.parentNode.removeChild(el);
  }catch(e){}
}

function removeallchilds(element){
  while (element.childNodes[0]){
    element.removeChild(element.childNodes[0]);
  }
}

function addEvent(elem, eventType, handler) {
//   alert("addEvent: "+elem+","+eventType+","+handler);
  if (elem.addEventListener) {
    if (!elem.eventHandlers) elem.eventHandlers = [];
    if (!elem.eventHandlers[eventType]) {
      elem.eventHandlers[eventType] = [];
      if (elem['on' + eventType]) elem.eventHandlers[eventType].push(elem['on' + eventType]);
      elem['on' + eventType] = handleEvent; 
    } 
      elem.eventHandlers[eventType].push(handler);
  //     for (i=0;i<elem.eventHandlers[eventType].length;i++){
  //       alert(elem.id+" handler "+i+": "+elem.eventHandlers[eventType][i]);
  //     } 
  } else {
            // IE
        elem.attachEvent("on"+eventType,handler);
  }
}

function removeEvent(elem, eventType, handler) { 
  if (elem.addEventListener) {
    var handlers = elem.eventHandlers[eventType];
      for (var i in handlers) if (handlers[i] == handler) delete handlers[i];
  }else{
    elem.detachEvent("on"+eventType,handler);
  }
}
function handleEvent(e)
{
//   alert("Handle event: "+e);
	var returnValue = true;
	if (!e) e = fixEvent(event);
	var handlers = this.eventHandlers[e.type]
	for (var i in handlers)
	{
		this.$$handleEvent = handlers[i];
		returnValue = !((returnValue && this.$$handleEvent(e)) === false);
	}
	return returnValue;
}

function fixEvent(event)
{
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};

fixEvent.preventDefault = function() {
	this.returnValue = false;
};

fixEvent.stopPropagation = function() {
	this.cancelBubble = true;
};
function range(a,b){
  var i=a;
  var arr = new Array;
  while (i !=b){
          arr[i]=i;
          i++;
  }
  return arr;
}
function isInArray(arr,thing){
  for (var i=0;i<arr.length;i++){
    if (arr[i]==thing){
//      alert("found "+thing);
     return true;
    }
  }
  return false;
}

function AJAXInteraction(url, callback) {

    var req = init();
    req.onreadystatechange = processRequest;
    
        
    function init() {
      if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
      } else if (window.ActiveXObject) {
        return new ActiveXObject("Microsoft.XMLHTTP");
      }else{
        alert("Call Huston! No XMLHTTP found!");
      }
    }
    
    function processRequest () {
      if (req.readyState == 4) {
        if (req.status == 200) {
          if (req.responseXML){
            if (callback) callback(req.responseXML);
          }
        }
      }
    }

    this.doGet = function() {
      req.open("GET", url, true);
      req.send(null);
    }
    
    this.doPost = function(body) {
      req.open("POST", url, true);
      req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      req.send(body);
    }
}
function getElementHeight(Elem) {
  if(document.getElementById) {
          var elem = document.getElementById(Elem);
  } else if (document.all){
          var elem = document.all[Elem];
  }
  xPos = elem.offsetHeight;
  return xPos;
}
function getElementWidth(Elem) {

  if(document.getElementById) {
          var elem = document.getElementById(Elem);
  } else if (document.all){
          var elem = document.all[Elem];
  }
  xPos = elem.offsetWidth;
  return xPos;

}

function startEventsPoller(){
  var secs=5*1000;
  PollerInterval = setInterval(function () {pollEvents()}, secs);
}
function acceptEventConf(caction,message){
  var progress_span=document.getElementById('progress_span');
  var call_progress_div=document.getElementById('call_progress_div');
  if (!call_progress_div) {
    call_progress_div=createElementAll('call_progress_div','div');
    progress_span.appendChild(call_progress_div);
  }
  call_progress_div.innerHTML=message;
}
function acceptEventChann(cid,cstate,message,you){
  var progress_span=document.getElementById('progress_span');
  var chan_div=document.getElementById(cid);
  if (!chan_div) {
     chan_div=document.createElement('div');
     chan_div.id=cid;
     chan_div.className='chan_div';
     var help_div=document.getElementById('incall_help_div');
     if (!help_div){
       progress_span.appendChild(chan_div);
     }else{
       progress_span.insertBefore(chan_div,help_div);
     }
  }
  if (you!=null){
    message="You ("+you+"):&nbsp;"+message;
  }else{
    message=document.getElementById('member_name_span').innerHTML+":&nbsp;"+message;
  }
  chan_div.innerHTML=message;
  var help_div=document.getElementById('incall_help_div');
  if (!help_div){
    help_div=createElementAll('incall_help_div','div');
    var help_div_p=createElementAll('incall_help_div_p','p');
    help_div_p.innerHTML="The call is in progess now. Clicking the close button will close the call panel so you can continue the site browsing but it <b>will not interrupt the call</b> flow.";
    var help_div_close_button=createElementAll('incall_help_div_close_button','input');
    help_div_close_button.type='button';
    help_div_close_button.value='Close';
    addEvent(help_div_close_button,'click',closeCall);
    help_div.appendChild(help_div_p);
    help_div.appendChild(help_div_close_button);
    progress_span.appendChild(help_div);
  }
}

function acceptEvents(xmldoc){ 
  var dbg=xmldoc.getElementsByTagName('debug')[0].childNodes[0].nodeValue;
  var events=xmldoc.getElementsByTagName('clubincall_event');
  var body=document.getElementsByTagName('body');
  for (var i=0;i<events.length;i++){
    var event=events[i];
    var core=null;
    var uniq=null;
    var you=null;
    var ids=event.getElementsByTagName('ids');
    ids=ids[0];
    for (var j=0;j<ids.childNodes.length;j++){
      var myid=ids.childNodes[j];
      switch (myid.tagName){
        case 'core' :
          core=myid.getAttribute('id');
          break;
        case 'uniq' :
          uniq=myid.getAttribute('id');
          if (myid.getAttribute('you'))
            you=myid.getAttribute('you');
          break;
      }
    }
    var message=event.getElementsByTagName('message')[0].childNodes[0].nodeValue;
    switch (event.getAttribute('type')){
      case 'channevent' :
        acceptEventChann(
          uniq,
          event.getElementsByTagName('state')[0].getAttribute('state'),
          message,
          you
        );
        break;
      case 'confevent' :
        acceptEventConf(
          event.getElementsByTagName('action')[0].getAttribute('action'),
          message,
          you
        );
        break;
    }
  }
}

function pollEvents (){
    var ai = new AJAXInteraction(url+"/"+urls['api_prefix']+urls['pollevents']+'?pollevents=poll',
        acceptEvents);
    ai.doGet();
}

