/*  
webshop.js
    library of validation scripts for webshop related administration services

*/

//validate an editing dialogue
function validate(paramContext){
//alert(paramContext);
//return false;
    var progress_bar_url=$('#progress_bar_url').val();
    switch (paramContext){
        case 'webshopSetting': //user is changing a webshop setting
            if ($('#currentSetting').val() != $('#settingOptions').val()){
                // user has change setting, ask them to confirm
                if (!confirm('Are you sure you want to change the ' + $('#settingCaption').val() + '?')){
                    return false;
                }
            }
            //need 
            
            
           $('#save').attr('target','keyhole');           // set target
           $('#default_params').val($('#url_params').val());
            return true;           
            break;
            
        case 'wsattributes'://product attribute editor
        //name
            if (!agValidateInput($('#txt_name'))){
                showError('Please enter the attribute name!',$('#txt_name'));
                return false;
            }
        //name
            if (!agValidateInput($('#txt_value'))){
                showError('Please enter the attribute value!',$('#txt_value'));
                return false;
            }
            $('#default_params').val("serviceid=1204&tag=_productAttributes&context=wsattributes&recordid=" + $('#productid').val());
            
            $('#save').attr('target','keyhole');           // set target
            return true;           
            break;
        case 'wscouriers'://freight service editor
        //name
            if (!agValidateInput($('#txt_name'))){
                showError('Please enter the freight service name!',$('#txt_name'));
                return false;
            }
        //publicname
            if (!agValidateInput($('#publicname'))){
                showError('Please enter the public name!',$('#publicname'));
                return false;
            }
            //load default values for all cutOff releated elements
            $('#hasTimeCutOff').val('0');
            $('#cutOffHour').val('0');
            $('#cutOffMinute').val('0');
            $('#availableMonday').val('0');
            $('#availableTuesday').val('0');
            $('#availableWednesday').val('0');
            $('#availableThursday').val('0');
            $('#availableFriday').val('0');
            $('#availableSaturday').val('0');
            $('#availableSunday').val('0');
            if ($('#chkAvailableMonday').attr('checked')){
                $('#availableMonday').val('1');
            }
            
            if ($('#chkAvailableTuesday').attr('checked')){
                $('#availableTuesday').val('1');
            }
            if ($('#chkAvailableWednesday').attr('checked')){
                $('#availableWednesday').val('1');
            }
            if ($('#chkAvailableThursday').attr('checked')){
                $('#availableThursday').val('1');
            }
            if ($('#chkAvailableFriday').attr('checked')){
                $('#availableFriday').val('1');
            }
            if ($('#chkAvailableSaturday').attr('checked')){
                $('#availableSaturday').val('1');
            }
            if ($('#chkAvailableSunday').attr('checked')){
                $('#availableSunday').val('1');
            }
            
         //check if user has selected a cut-off time
            if (($('#displayCutOffHour').val().length!=0)   && ($('#displayCutOffMinute').val().length!=0)){
                $('#cutOffHour').val($('#displayCutOffHour').val());
                $('#cutOffMinute').val($('#displayCutOffMinute').val());
                $('#hasTimeCutOff').val('1');
            
            }
            
         
            $('#default_params').val("serviceid=1204&tag=listcouriers&context=wsshipping");
            
            $('#save').attr('target','keyhole');           // set target
            return true;           
            break;
        case 'wszones'://freight zone editor
        //name
            if (!agValidateInput($('#txt_name'))){
                showError('Please enter the zone name!',$('#txt_name'));
                return false;
            }
            $('#default_params').val("serviceid=1204&tag=listcourierzones&context=wsshipping&courierid=" + $('#parentid').val());
            $('#url_params').val("serviceid=1204&tag=listcourierzones&context=wsshipping&courierid=" + $('#parentid').val());
            
            $('#save').attr('target','keyhole');           // set target
            return true;           
            break;
        case 'wstax'://freight zone editor
        //name
            if (!agValidateInput($('#txt_name'))){
                showError('Please enter the tax zone name!',$('#txt_name'));
                return false;
            }
            if (!agValidateInput($('#txt_rate'))){
                //showError('Please enter the tax zone name!',$('#txt_name'));
                return false;
            }
            $('#save').attr('target','keyhole');           // set target
            return true;           
            break;


        case 'wsproducts'://product editor
        //name
            if (!agValidateInput($('#txt_name'))){
                showError('Please enter the name!',$('#txt_name'));
                return false;
            }
            if (!agValidateInput($('#txt_code'))){
                showError('Please ensure there is a product code!',$('#txt_code'));
                return false;
            }
            if (!agValidateInput($('#txt_quantity'))){
                return false;
            }
            if (!agValidateInput($('#txt_price'))){
                return false;
            }
            //isSaleItem?
            //alert($('#isSaleItem').attr('checked'))
            if ($('#isSaleItem').attr('checked')){
                if (!agValidateInput($('#txt_saleprice'))){
                    return false;
                }
            }
            
            
       case 'wscategories'://category editor, check xref to original
        //name
            if (!agValidateInput($('#txt_name'))){
                showError('Please enter the name!',$('#txt_name'));
                return false;
            }
            if (parseInt($('#original_id').val())==-1){
                showError('Please select a category rather than a department!',$('#original_id'));
                return false;
            
            }
            break;
        case 'wsfreight'://freight charge editor
        //factorstart
            if (!agValidateInput($('#factorstart'))){
                showError('Please enter the start of the range to which this charge applies!',$('#factorstart'));
                return false;
            }
        //factorend
            if (!agValidateInput($('#factorend'))){
                showError('Please enter the end of the range to which this charge applies!',$('#factorend'));
                return false;
            }
        //price
            if (!agValidateInput($('#price'))){
                showError('Please enter the price that applies!',$('#price'));
                return false;
            }
            $('#default_params').val($('#url_params').val());
            
            $('#save').attr('target','keyhole');           // set target
            return true;           
            break;
        case 'wsfreightgroups'://freight charge editor
        //name
            if (!agValidateInput($('#txt_name'))){
                showError('Please enter a name for this group!',$('#txt_name'));
                return false;
            }
        //factor
            if (!agValidateInput($('#factor'))){
                showError('Please enter the weight or freight factor that this group defines!',$('#factorstart'));
                return false;
            }
            $('#default_params').val($('#url_params').val());
            
            $('#save').attr('target','keyhole');           // set target
            return true;           
            break;
       case 'wsstock'://validate stock entry
        //name
            if (!agValidateInput($('#stockName'))){
                showError('Please enter a name for this stock item!',$('#stockName'));
                return false;
            }
        //stockCode
            if (!agValidateInput($('#stockCode'))){
                showError('Please enter a unique stock code for this item!',$('#stockCode'));
                return false;
            }
        //stockQuantity
            if (!agValidateInput($('#stockQuantity'))){
                return false;
            }
        //stockCode
            if (!agValidateInput($('#stockTrigger'))){
                return false;
            }
            
            $('#default_params').val($('#url_params').val());
            
            $('#save').attr('target','keyhole');           // set target
            return true;           
            break;
              
       
       case 'bulkLoad':// uploading assets for bulk load purposes
            var isReady=false;
            var c=0;
            var m='';
            if (jQuery.trim($('#spreadsheet').val())!=''){
               // test that this IS a spreadsheet
                m=$('#spreadsheet').val().toString().toLowerCase();
                c=m.lastIndexOf(".")
                m=m.substr((c+1),4)
                if ((m !='xls')){
                   showError("Please select a valid spreadsheet !",$('#spreadsheet')); 
                   return false;
                }
                //set flag indicating there's a spreadsheet in payload
                $('#isSpreadsheet').val('1');
                isReady=true;
            }
            if (jQuery.trim($('#zip').val())!=''){
               // test that this IS a zipped file
                m=$('#zip').val().toString().toLowerCase();
                c=m.lastIndexOf(".")
                m=m.substr((c+1),4)
                if ((m !='zip')){
                   showError("Please select a valid zip file !",$('#zip')); 
                   return false;
                }
                $('#isZip').val('1');
                isReady=true;
            }
            if (!isReady){
                showError('Please select either a spreadsheet or zip file before proceeding!',$('#spreadsheet'));
                return false;                
            }
            
       
            $('#default_params').val($('#url_params').val());
            
            $('#save').attr('target','keyhole');           // set target
            return true;           
            break;
            
       default: //all unspecified
        //name
            if (!agValidateInput($('#txt_name'))){
                showError('Please enter the name!',$('#txt_name'));
                return false;
            }
       
        break;            
    }
    // txt_strap
    
    // txt_summary
    
    // narrative
   // if ($('#txtHTML').length){
   //     var data = $('#txtHTML').val();
   //    $('#fd_description').val(data);
   // }
//    return false;

    if (!agValidatePicture($('#picture'))){
        return false;
    }
   // alert($('#default_params').val());
    // $('#default_params').val($('#url_params').val());
     if ($('#debugSave').length){
    
        if ($('#debugSave').attr('checked')!=true){
            // alert($('#debugSave').attr('checked'))
            $('#save').attr('target','keyhole');
            //alert($('#save').attr('target'));
        }
        else
        {
        $('#save').attr('target','_blank');
        }
     }
     else{
        $('#save').attr('target','keyhole');
     }

    //cleanUpEditors();    
    return true;
}


//wsAction: switchboard for handling change events
function wsAction(paramAction,paramContext, paramID){
    var params='';
    var url='';
    var el='';
    //alert(paramContext);
    switch (paramAction){
        case 'attributes': // edit product attributes
                var params='serviceid=1204&tag=_productAttributes&context=' + paramContext + '&recordid=' + paramID;            
                //return genericDialogue(params,'','', '');
                generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', '');


                break;
        case 'delete'://delete the record
        
            var params='serviceid=1204&tag=_delete&context=' + paramContext + '&id=' + paramID;
            paramComplete='genericCSS();' // default behaviour
            url=$('#base').val() + "v2010/ajax.asp?" + params;
            el='#row' + paramID //name of the row to delete to provide visual feedback
            if (confirm('Are you sure you want to delete this record ?')){
                    $.getJSON(url, function(data){
                        //alert(data.errors);
                        if(data.errors==0){
                                if ($(el).length){
                                    $(el).remove();
                                }
                                if (paramComplete!=''){
                                    eval(paramComplete);
                                }
                        }
                        else{
                            alert(data.message);
                        }
                       
                        
                });                    
            
            }
        
        
        case 'deletexReference'://delete the record
            var url=$('#base').val() + "v2010/ajax.asp";
            var d=new Date();
            var params='serviceid=1204&tag=_deletexreference&context=' + paramContext + '&recordid=' + paramID + '&master=' + $('#master').val() + '&KAV=' + d.toString() ;
            var html='<span><a href="#" id="href' + paramID + '">' + $('#item' + paramID).attr('title') + '</a></span>';
            
            //<span><a id="href<%= vdata("uid")%>" href="#"><%= vdata("title")%></a></span>
            var errorURL=url + '?' + params
            //window.location.href=errorURL;
            $.get(url,params);
            
            
            $('#item' + paramID).slideUp('fast');
            //alert($('.wrapRHSScroll span').length);
            if ($('.wrapRHSScroll span').length !=0){
                $(html).insertBefore('.wrapRHSScroll span:first');
            }
            else{
                $('.wrapRHSScroll').html(html);
            }
            
            break;
            
        case 'edit': // edit the record
            
        case 'export': // export to EXCEL
            var url=$('#base').val() + "v2010/ajax.asp?serviceid=1204&tag=_export&context=" + paramContext;
            //var params='serviceid=1204&tag=_export&context=' + paramContext;
            //var settings='Height=' + screen.height + ',Width=' + screen.width + ',Top=0,left=0,scrollbars=yes,resizable=1, location=1,status=1'
             var w=window.open(url,paramContext);  
            break;
        case 'filter': //apply filter
            if ($('#filter').val().length==0){
                showError('Please enter part of a code or product name before continuing!',$('#filter'));
                return void[0];  
            }
            
            var params='serviceid=1204&tag=list&context=' + paramContext + '&report=filter&filter=' + $('#filter').val();
             generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', '');
            return void[0];
            break;


        case 'importExcel': //upload spreadsheet
            var params='serviceid=1204&tag=import&context=' + paramContext 
             generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', '');
            return void[0];
            break;

        case 'media': // manage assets associated with the record
            var params='serviceid=1204&tag=_media&context=' + paramContext + '&id=' + paramID;
           // alert(params);
            return mediaConsole(params,paramID);
            break;            

        case 'stockReservations': //facilitate upload / download of reservations
            var params='serviceid=1204&tag=stockReservations'
             generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', '');
            return void[0];
            break;
        case 'showimage'://show picture
            displayImage(paramContext);
            break;
        case 'sort': //display sorting dialogue
            var params='serviceid=1204&tag=_sort&context=' + paramContext + '&id=' + paramID;
            
            return sortConsole(params,paramID,'generic_refresh_listing();');
            break;
               
        case 'state'://change state
            var params='serviceid=1204&tag=_state&context=' + paramContext + '&id=' + paramID;            
            toggleState(params,paramID);
            break;
        case 'stock': //open the stock management interface
            var params='serviceid=1204&tag=liststockitems&context=wsstock&productid=' + paramID;
            generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', 'generic_tracking(' + '\'' + params + '\')');
            return void[0];
            break; 
            
        case 'xreferences': //handle cross references
            if (paramContext=='wsproducts'){
                var params='serviceid=1204&tag=_productPlacement&context=' + paramContext + '&recordid=' + paramID;            
                return manageXreferences(params,paramID,'setupGroups();','');
                break;
            }
            else{
                var params='serviceid=1204&tag=_xrefMembers&context=' + paramContext + '&recordid=' + paramID;            
                return manageXreferences(params,paramID,'setupMemberManagement();','postMembers();');
                break;
            
            }
            break;
        case 'listzones': //list freight service zones
            var params='serviceid=1204&tag=listcourierzones&context=wsshipping&courierid=' + paramID;
            generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', '');
            return void[0];
            break;            
        case 'zones': //list freight service zones
            var params='serviceid=1204&tag=listcourierzones&context=wsshipping&courierid=' + $('#courierid').val();
            generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', '');
            return void[0];
            break;            
        case 'couriercharges': //list freight services list box triggered this
            var params='serviceid=1204&tag=listcourierzonecharges&context=wsshipping&courierid=' + $('#courierid').val();
            generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', '');
            return void[0];
            break;            
        case 'zonecharges': //list freight courier zones list box triggered this
            var params='serviceid=1204&tag=listcourierzonecharges&context=wsshipping&courierid=' + $('#courierid').val() + '&zoneid=' + $('#zoneid').val();
            generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', 'generic_tracking(' + '\'' + params + '\')');
            return void[0];
            break; 
        case 'listcourierzonecharges': // triggered when user cancels edit of a courier charge  [webshop forms]
            var params='serviceid=1204&tag=listcourierzonecharges&context=wsshipping&courierid=' + paramID + '&zoneid=' + $('#parentid').val();
            //alert(params)
            generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', 'generic_tracking(' + '\'' + params + '\')');
            return void[0];
            break; 
        case 'wsfreightgroups': // triggered when user cancels edit of a freight group
            var params='serviceid=1204&tag=listweightgroups&context=wsshipping';
            //alert(params)
            generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', 'generic_tracking(' + '\'' + params + '\')');
            return void[0];
            break; 
        case 'wscouriers': // triggered when user cancels edit of a freight group
            var params='serviceid=1204&tag=listcouriers&context=wsshipping';
            //alert(params)
            generic_populate_panel('../asp/object_administration.asp', params, 'ajax_results', 'generic_tracking(' + '\'' + params + '\')');
            return void[0];
            break; 
        case 'reloadWS': //triggered to reload webshop settings object from database
            var url=$('#base').val() + "v2010/ajax.asp";
            var d=new Date();
            var params='serviceid=1204&tag=_reloadWS&context=' + paramContext  + '&KAV=' + d.toString() ;
             $.get(url,params);      
        default://other actions         
                
    
    }
    return void[0];
}

//setupGroups: capture the click event for each of the scoping items
function setupGroups(){
    //var url=$('#base').val() + "v2010/ajax.asp"
    $('.lhsDialogue a').bind('click',function(e){
        e.preventDefault();
        $('.rhsDialogue').load($(this).attr('href'), function(response, status, xhr){ });
    });
}

//setupMemberManagement
function setupMemberManagement(){

       
       // $('.wrapLHSScroll ul').sortable( "destroy")
        $('.wrapLHSScroll ul').sortable();
        setupMembers();
}




//setupMembers: capture the tick/untick events for managing members of an xreference context
function setupMembers(){
        var url=$('#base').val() + "v2010/ajax.asp";
        var base=$('#params').val();
        var master=$('#master').val();
        var d=new Date();
        
    $('.wrapRHSScroll a').unbind().bind('click',function(e){
        e.preventDefault();
        var html='<li title="' + $(this).text() + '" id="' + $(this).attr('id').replace('href','item') + '"><a href="javascript: wsAction(\'deletexReference\',\'' + $('#indexingContext').val() + '\',' + $(this).attr('id').replace('href','') + ');" class="delete" title="Delete this record"></a>' + $(this).text() + '</li>';
        data=base + '&tag=_wsUpdateXREF&recordid=' + $(this).attr('id').replace('href','') + '&master=' + master + '&KAV=' + d.toString() 
        errorURL=url + '?' + data
        //window.location.href=errorURL;
        $.get(url,data);
        $(this).parent().slideUp('fast');
        //alert($('.wrapLHSScroll ul li').size());
        if ($('.wrapLHSScroll ul li').size() !=0){
            $(html).insertAfter('.wrapLHSScroll ul li:last');
        }
        else{
            $('.wrapLHSScroll ul').html(html);
        }
        
    });
}


function postMembers(){

//$('.wrapLHSScroll ul').unbind();
//$('.wrapRHSScroll a').unbind();

    //loops through sortables
    var url=$('#base').val() + "v2010/ajax.asp"
    var base=$('#params').val();
    var master=$('#master').val();
    var data='';
    var d=new Date();
    var errorURL='';
    //alert(base);
    //return false;
    $('.wrapLHSScroll li').each(function(i){
        //alert($(this).attr('id'));
        data=base + '&tag=_wsSaveSortMember&recordid=' + $(this).attr('id').replace('item','') + '&master=' + master + '&sequence=' + i + '&KAV=' + d.toString() 
        //errorURL=url + '?' + data
        //window.location.href=errorURL;
        $.get(url,data);
    });
     $('.wrapLHSScroll ul').sortable( "destroy");
    return true;
}







//updateRMSCategories: dynamically repopulate the rmsCategories based on selection of a department
function updateRMSCategories(){
    var paramID=$('#rmsDepartments').val();
    var params="serviceid=1204&tag=_rmscategories&departmentID=" + paramID
    generic_populate_panel("", params, "rmsCategoryDropDown", "")
    return void[0];
} 

//applyStagingFilters: validates the filters being used to perform search of staging area items
function applyStagingFilters(paramPOS){
    var bFilter=false;
    var params=""; //parameters to use for search
    var target="filterResultsArea" // where to present the results
    var url=$('#base').val() + "v2010/ajax.asp"
    var d=new Date();
    switch (paramPOS){
        case 'RMS': // RMS staging filters
            // we need to ensure at least one filter is in place in order to restrict the result set
            if ($('#rmsDepartments').val()!='0'){
                bFilter=true;
            }
            
            if ($('#rmsCategories').val()!='0'){
                bFilter=true;
            }
            
            if ($('#itemName').val()!=''){
                bFilter=true;
            }
            
            if ($('#itemCode').val()!=''){
                bFilter=true;
            }
            
            if (!bFilter){
                showError('Please select one or more filters before proceeding!',$('#rmsDepartments'));
                return false;
            }
            
            //build parameters for search: we execute a test first to check out how many items exist (check=1)
            params="serviceid=1204&tag=_rmsSearchItems&check=1&d=" + $('#rmsDepartments').val() + "&c=" + $('#rmsCategories').val()
            params+="&n=" + $('#itemName').val() + "&ic=" + $('#itemCode').val();
            var paramData=params + '&t=' + d.toString()
            var errorURL=url + "?" + paramData;
            //alert(params)
            //window.location.href=errorURL
            $.getJSON(errorURL, function(data){
                   // alert(data.numberOfRecords);
                   if ((parseInt(data.numberOfRecords) > 300)||(parseInt(data.numberOfRecords)==0)){
                        var message="<div class='wrapError'><p class='message'>Your search query returned <strong>" + data.numberOfRecords + "</strong> records, please modify your search!</p></div>";  
                        $('#filterResultsArea').html(message);                   
                    } 
                    else{   
                         var newParams=params.replace("check=1","check=0");
                         //var errorURL=url + "?" + newParams;
                         //window.location.href=errorURL
                         generic_populate_panel("", newParams, target, "setupImport();");
                        
                        
                    }
                  });
            
        case 'TOREX': // Torex staging filters
            break;
        default: //unhandled
    
    }//end switch statement
return false;
}

//setupImport: monitors the click event on checkboxes 
function setupImport(){
    $(':checkbox').bind('click',function(){
        if ($(this).attr('id')!='optDescription'){
            if ($(this).val()==-1){
                if ($(this).attr('checked')){
                 $('#selectItemsCheck :checkbox').attr('checked','true');
                }
                else
                {
                   $('#selectItemsCheck :checkbox').attr('checked','');
                }
             }
           }
    });
}
//importPOSItems: validate the import dialogue before initiating import/update
function importPOSItems(paramPOS){
    //validate that something has been selected
    var buffer='0'//to collection the uid values
    $('#selectItemsCheck :checkbox').each(function(){
            if( $(this).attr('checked') ){
                buffer+=',' + $(this).val()
            }
    });
    if (buffer=='0'){
        showError('Please select one or more items to import!',$('#butImport'));
        return false;
    }
    $('#payload').val(buffer);
   $('#selectItems').attr('target','keyhole');
   // return true;
    $('#filterResultsArea').html('');
    //we have something to submit
    //var url=$('#base').val() + "v2010/ajax.asp"
    //$.post(url, $("#selectItems").serialize());
    return false;
}

//updateAttributeName: triggered when user selects from attribute name listing (when editing product attributes)
function updateAttributeName(paramValue){
    $('#txt_name').val($('#attributeNameLookup').val());
}

//wsResetDefault: FIX: to address when user navigates to attributes, need to reset the default 'listing' params
function wsResetDefault(){
    $('#default_params').val("serviceid=1204&mode=6&tag=list&context=wsproducts&report=all");
}

//updateSettingNarrative: based on selection in 'listbox' narrative explaining what the setting means is updated (when editing webshop settings)
function updateSettingNarrative(){
    var id=$('#settingOptions').val();
    $('#settingNarrative').html($('#narrative' + id).html());
}
