/* 
ajax.js: generic library of javascript for animation / branding effects
    david.kelly@fanore.com (http://www.fanore.com/website_design.htm)
    
    
    
*/

//    generic_populate_panel: uses ajax to open param_url, into param_el and executes param_complete when finished

function generic_populate_panel(param_url, params, param_el, param_complete){
    //if (params.indexOf('xedit') > 0){
        //window.location.href=param_url + "?" + params
        //return void[0];
    //}
    var d=new Date();
    var target='#' + param_el
    
    //var url=$('#base').val() + "v2010/ajax.asp?" + params + '&d=' + d.toString()
    var url=$('#base').val() + "v2010/ajax.asp"
    // + params + '&d=' + d.toString()
    var data=params + '&kva=' + d.toString()
    var errorURL=url + "?" + data;
    displayDebugingInformation(errorURL);
      $(target).load(url,data, function(response, status, xhr){      
                 if (status=='error')
                 { // handle error messaging here
                    // if in development environment we redirect to the url so we can get an idea of what the problem is
                    window.location.href=errorURL
                    
                 }
                 else
                 {//proceed with handling the results
                 //alert(param_complete);
                  if (param_complete.indexOf(';')>0){
                    var p=param_complete.split(';')
                    for (var i=0;i<p.length;i++){
                        eval(p[i]);
                    }// end loop through on complete events
                  }//end handling multiple events
                  else{
                    //alert(param_complete);
                    if (param_complete=='generic_tracking'){
                        generic_tracking(params);  
                    }
                    else
                    {
                        if (param_complete.length!=0){
                        eval(param_complete);
                        }
                    }//end test of single event

                    

                 }//end test for multiple events
                 eval('genericCSS();')
                }//end test for errors
            });//end load
            
} 
function generic_null(){
    return void[0];
}
function generic_tracking(params){
    //alert(params)
    if ($('#url_params').length){
        $('#url_params').val(params)
    
    }
    return void[0];
}

//generic_refresh_dashboard: refresh an ajax enabled workspace dashboard
function generic_refresh_dashboard(){

    if ($('#dashboard_params').length==0){
        return void[0];
    }
    var d=new Date();
    var target='#dashboardpanel'
    var params=$('#dashboard_params').val();
    var url=$('#base').val() + "v2010/ajax.asp"
    var data=params + '&d=' + d.toString()
    var errorURL=url + "?" + data;
    //alert("generic_refresh_dashboard" + errorURL);
    $(target).load(url,data, function(response, status, xhr){ 
                 if (status=='error')
                 { // handle error messaging here
                    // if in development environment we redirect to the url so we can get an idea of what the problem is
                    
                    window.location.href=errorURL
                 }
                 else
                 {//proceed with handling the results
                 
                 }
      });

}

function cleanUpEditors(){
    return void[0];
    var n=navigator.appVersion;
    var bIE=false;
    if(n.indexOf('MSIE')!=-1){
        bIE=true;
    }
    
                    for( editorID in CKEDITOR.instances){
                        //alert(editorID);
                       if (bIE==true){
                            CKEDITOR.remove(CKEDITOR.instances[editorID]);
                       }
                       else{
                            CKEDITOR.instances[editorID].destroy();
                       } 
                      }                    

}


// generic_refresh_listing: populate ajax_results with appropriate listing
function generic_refresh_listing(){

    var d=new Date();
    var target='#ajax_results'
    var params=$('#default_params').val();
    
    var url=$('#base').val() + "v2010/ajax.asp"
    if (params.indexOf('filter=')==-1){
   if ($('#serviceFilters').length){
                var q=parseStringAsQuery($('#serviceFilters select').val());
                if (q['filter']){
                    params+='&filter=' + q['filter'].toString();
                    }
            }    
    }
    var data=params + '&d=' + d.toString()
    var errorURL=url + "?" + data;
    //alert(errorURL);
    //alert("generic_refresh_listing: " + errorURL);
//    alert(target);
    //$(target).html('');
    $(target).load(url,data, function(response, status, xhr){ 
                 if (status=='error')
                 { // handle error messaging here
                    // if in development environment we redirect to the url so we can get an idea of what the problem is
                    //alert("error");
                     window.location.href=errorURL
                 }
                 else
                 {//proceed with handling the results
                    //alert("here");
                     eval('generic_refresh_dashboard();');
                     window.location.href=target
                 }    
         });
                      
 return void[0];
}

//genericCSS: applies CSS rules to objects
function genericCSS(){

//display alternating colour on rows in a list
    if ($('.wsListWrap').length){
        $('.wsListWrap tr:odd').each(function(){
            if (!$(this).hasClass('wsAlt')){
                $(this).toggleClass('wsAlt');
            }
        });
        $('.wsListWrap tr:even').each(function(){
            if ($(this).hasClass('wsAlt')){
                $(this).toggleClass('wsAlt');
            }
        });
        $('.dataListingArea li:odd').each(function(){
            if (!$(this).hasClass('wsAlt')){
                $(this).toggleClass('wsAlt');
            }
        });
        $('.dataListingArea li:even').each(function(){
            if ($(this).hasClass('wsAlt')){
                $(this).toggleClass('wsAlt');
            }
        });
    }
//bind to any forms displayed to track focus
//alert($('#save').length);
    if ($('#save').length){
        $(':input').each(function( e, item ){
           var elementClassName=$(this).attr('class');
           switch(elementClassName){
                case '': // no class specified so ignore
                    break;
                default: //follow focus / blur events
                    $(this).focus(function(){
                        $(this).closest('tr').addClass('focused');
                        
                    });
                    $(this).blur(function(){
                        $(this).closest('tr').removeClass('focused');
                    });
           }
        });
        
    
    }    
     // bind to keypress event on the filter/search dialogue
     if ($('#filterForm').length){
        $('#filter').keyup(function(event) {
                if (event.keyCode == '13') {
                     event.preventDefault();
                     wsAction('filter',$('#context').val(), 0);
                }
            });
         $('#applyFilterButton').click(function(event){
            event.preventDefault();
            //if ($('#filter').val().length!=0){
            wsAction('filter',$('#context').val(), 0);
            //}
         });
        $('#filter').click(function(event) {
           
                 event.preventDefault();
                 $('#filter').val('');
           
        });
    
     }   
//activateDatePickers
    eval('activateDatePickers();');    
}

//activateDatePickers: IF any formelements have the class "optionalDate" or "requiredDate" then these are "datePickers
function activateDatePickers(){
    if ($('.optionalDate').length){
         $('.optionalDate').datepicker({
             buttonImage: $('#base').val() + 'v2010/images/calendarSmall.png',
             buttonImageOnly: true,
             showOn: 'both',
             buttonText: 'Choose',
             minDate: new Date(),
             closeText: 'X' ,
             dateFormat: 'dd M yy'
        });
   }
    if ($('.requiredDate').length){
         $('.requiredDate').datepicker({
             buttonImage: $('#base').val() + 'v2010/images/calendarSmall.png',
             buttonImageOnly: true,
             showOn: 'both',
             buttonText: 'Choose',
             minDate: new Date(),
             closeText: 'X' ,
             dateFormat: 'dd M yy'
        });
   }


}
// generic_clear: simply clears innerhtml of ajax_results panel
function generic_clear(){
    $('ajax_results').innerHTML='';
}

/* generic_context_selector: uses the param_context to build ajax call to populate 'select an item' dialogue
                             param_context: tag context to enable rendering of appropriate listing
                             param_base: first part of params e.g. objectid=x&tag=y
                             param_el: id of element into which the ID value of selected item should be injected
                             param_caption: id of the element into which the 'name' / 'caption' of item selected should be injected
*/                            
function generic_context_selector(param_context, param_base, param_el,param_caption,param_before){
    var params=param_base
    if (param_before.length!=0){
        var proceed=eval(param_before);
        if (proceed==false){
            return void[0];
        }
         params=params + proceed;
    }
    
    var url='../asp/object_administration.asp';
    if (param_context.length==0){return void[0]}
    
    //populate utility object with ajax content and present on screen
      var d=new Date();
          var myAjax = new Ajax.Updater('utility', 
                url, 
                {
                    method: 'get', 
                    parameters: params + '&d=' + d.toString() + '&context=' + param_context + '&el=' + param_el + '&caption=' + param_caption,
                    onComplete: function(obj){
                      
                      eval('tickle_session();')
                      eval('position_utility();');
                    }
                });       
    
}

/*
generic_selector_select_this: when panel populated (see generic_context_selector) each item can be selected - points at this function
    param_id: id of the item selected
    param_el: id of element into which param_id should be placed (always a text box)
    param_caption: id of element into which 'title of item' should be placed
     
*/
function generic_selector_select_this(param_id, param_el, param_caption, param_auto){
var url="../asp/object_administration.asp"
    if (param_auto.length!=0){
        //special case requires that we open param_auto via ajax and then refresh list
          var d=new Date();
              var myAjax = new Ajax.Updater(param_caption, 
                    url, 
                    {
                        method: 'get', 
                        parameters: param_auto + '&d=' + d.toString() + '&param_id=' + param_id,
                        onComplete: function(obj){
                          generic_close_utility();
                          eval('generic_refresh_listing();')
                        }
                    });       
           
    }
    else{
    
    
    $(param_el).value=param_id;
    $(param_caption).innerHTML=$('caption' + param_id).innerText;
    generic_close_utility();
    }
}

//generic_close_utility: simply closes the utility object
function generic_close_utility(){
    new Effect.DropOut('utility');
    $('utility').innerHTML='';
}

//generic_delete: deletes item from ajax feature
function  generic_delete(params,param_id){
    if (!confirm('Are you sure you want to delete this record?')){
        return void[0];
    }
    var url="../asp/object_administration.asp" 
    var row_id='listing_' + param_id
    var d=new Date();
    //to debug any issues with deleting items simply uncomment the lines below
    //window.location.href=url + "?" + params + '&param_id=' + param_id + '&d=' + d.toString()
    //return void[0];
          
              var myAjax = new Ajax.Updater('dump', 
                    url, 
                    {
                        method: 'get', 
                        parameters: params + '&param_id=' + param_id + '&d=' + d.toString(),
                        onComplete: function(obj){
                          Element.remove(row_id);
                        }
                    });       
    return void[0];
}

//generic_state_change: applies status update to passed data / toggles on/off only
function generic_state_change(params, param_id){
    var url="../asp/object_administration.asp"
    var d=new Date();
    var img='state_' + param_id;
    var o_src=$(img).src
//     alert($(img).src)
    if (params.endsWith('0')){
        var src='../images/status_1.gif'
        var n_params=params.replace('current=0','current=1');
        var n_ref="javascript: generic_state_change('" + n_params + "'," + param_id + ");"
    }
    else{
        var src='../images/status_0.gif'
        var n_params=params.replace('current=1','current=0');
        var n_ref="javascript: generic_state_change('" + n_params + "'," + param_id + ");"
    }
    //get original value of 'href'
    var myAjax = new Ajax.Updater('dump', 
                    url, 
                    {
                        method: 'get', 
                        parameters: params + '&param_id=' + param_id + '&d=' + d.toString(),
                        onComplete: function(obj){
                         //   alert($(img).src)
                          $(img).src=src;
                          //alert($(img).src)
                          //alert(n_ref)
                          $('state_action_' + param_id).href=n_ref;
                        }
    });       
    return void[0];
    
}

//track_narrative: activates narrative tracking
function track_narrative(){
        var alreadyRun = false;
        var cwseditor = FCKeditorAPI.GetInstance('txtHTML') ;
    	var oDOM = cwseditor.EditorDocument ;
    	var iLength ;
        iLength = oDOM.body.innerText.length ;
        var buffer=oDOM.body.innerText;
        iLength=buffer.length //length of characters in object being tracked
        // pickup tracking variables
        var i_limit=parseInt($F('tracking_limit')) // limit of characters
        var i_tracking=parseInt($F('tracking_state')) // current state on/off
        var el_reciever=$F('tracking_reciever');//object to populate
        if (i_tracking==0){ // implies that tracking is turned off
            return void[0];
        }
        
        
        if (iLength > i_limit){
            iLength=i_limit;
        }
        $(el_reciever).value=buffer.substring(0,iLength);
        var el=get_el('js_characters')
        if (el){
                 $('js_characters').innerText=$(el_reciever).value.length 
        }
    return void[0];        

}

function toggle_track_narrative(){
    var track_on_text='<span>stop tracking</span>';
    var track_off_text='<span>track narrative</span>';
    var param_switch=parseInt($F('tracking_state'));
    if (parseInt(param_switch)==0){
        $('tracking_state').value='1'
        $('track_button').innerHTML=track_on_text
    }
    else{
        $('tracking_state').value='0'
        $('track_button').innerHTML=track_off_text
    
    }
    return void[0];
}

//thumbnail_manager: dhtml panel for manipulating thumbnail images
function thumbnail_manager(param_url,params,param_id){
    alert("this feature currently unavailable");
    return void[0];
    var d=new Date();
      var myAjax = new Ajax.Updater('utility', 
            param_url, 
            {
                method: 'get', 
                parameters: params + '&d=' + d.toString(),
                onComplete: function(obj){
                  eval('tickle_session();')
                  eval('position_utility();');
                }
            });   
    
}

//generic_cancel(): uses 'url_params' to refresh listing
function generic_cancel(){
    var d=new Date();
    var target='#ajax_results'
    var params=$('#url_params').val();
    var url=$('#base').val() + "v2010/ajax.asp"
    var data=params + '&kva=' + d.toString()
    var errorURL=url + "?" + data;
    //alert(errorURL);
    //alert("generic_refresh_listing: " + errorURL);
//    alert(target);
    //$(target).html('');
    $(target).load(url,data, function(response, status, xhr){ 
                 if (status=='error')
                 { // handle error messaging here
                    // if in development environment we redirect to the url so we can get an idea of what the problem is
                    
                     window.location.href=errorURL
                 }
                 else
                 {//proceed with handling the results
                    //alert("here");
                     eval('generic_refresh_dashboard();');
                     window.location.href=target
                 }    
         });
                      
 return void[0];

}


//ajaxPickup:
function ajaxPickup(paramJSON){
 //alert(paramJSON);
    var obj = jQuery.parseJSON(paramJSON);
   
    if (obj.errors=='1'){
        //present or handle error message here
       //alert("errors");
         showError(obj.errorMessage,'');
    }
    else{
        //alert(obj.tag)
        //alert(obj.context)
        switch(obj.tag){
            case "_save": //user has committed a save
            //alert('saved');
                eval('generic_refresh_listing();');
                break;
            case "_saveAsset": //user has uploaded a file and we want to refresh listing
                asset_refresh_listing();
                
                
                break;
            case "_saveAssetCaption": //user has updated the caption for a file
                asset_refresh_listing();
                $('#assetWorkspace').html('');
                break;
            default: //unhandled
                alert("unhandled response");
        }
    }
}

//asset_refresh_listing: used when managing assets
function asset_refresh_listing(){
    var context=$('#assetParams').val();
    var d=new Date();
    var params=$('#assetParams').val();
    var url=$('#base').val() + "v2010/ajax.asp"
    var data=params + '&kva=' + d.toString()
    var errorURL=url + "?" + data;
    //alert(errorURL);
    $('#assetListing').load(url,data,function(response, status, xhr){
        //asset_editor_reload();
    });
    
}
//asset_editor_reload
function asset_editor_reload(){
    var context=$('#assetContext').val();
    var d=new Date();
    var serviceid=$('#assetService').val();
    var record=$('#assetParent').val();
    var url=$('#base').val() + "v2010/ajax.asp"
    var params=$('#assetParams').val().replace('_listassets','_editAsset');
    var data=params + '&kva=' + d.toString()
    var errorURL=url + "?" + data;
   // openExternalTool(errorURL);
  //  return void[0];
    $('#assetEditor').load(errorURL, function(){
        //alert($('#assetEditor').html());
    });
}
