/**
 * holds the ajax return data of each option in an array
 * 
 * @param selectObj
 */
var selectObj = Array();

/**
 * on document ready - handler
 */
$(document).ready(function(){
    if($('#subOptionSelected_'+$('#rootOptionIdSelected').val()+' option').length == 1) { //only 1 element and the phrase "please choose"
        jQuery.each($('#subOptionSelected_'+$('#rootOptionIdSelected').val()+' option'),
                function(i,element) {
            if((i == 0) && $(this).val() > 0) {
                // set first product option here, which comes right after the phrase "please choose". then trigger the onchange event
                $('#subOptionSelected_'+$('#rootOptionIdSelected').val()).val($(this).val()).trigger('change');
            }
        }
        );
    }
    else {
        if($('#allow_picture_zoom').val() == "1") {
            activateZoom();
        }
    }
});
function activateZoom() {
    clearZoom();
    $("#bigPic").removeClass('noZoom');
    $("#bigPic").addClass('zoom');
    $("#bigPic").attr("title", $(".detailPage > .textDetails > h2").html() );
    $("#zoomLoaderPic").show();
    var zoomOptions =
    {
        zoomWidth: 280,
        zoomHeight: 450,
        position : 'left',
        yOffset : 0,
        xOffset : 20,
        showEffect: "fadein",
        hideEffect: "fadeout",
        fadeinSpeed: "fast",
        fadeoutSpeed: "fast"
    }
    $('#bigPic').jqzoom(zoomOptions);
}
function clearZoom() {
    $($.jqzoom).remove();
    $("#bigPic").unbind();
}
function removeZoom() {
    $($.jqzoom).remove();
    $("#bigPic").unbind();
    $("#zoomLoaderPic").hide();
    $("#bigPic").removeAttr('href');
    $("#bigPic").addClass('noZoom');
    $("#bigPic").removeClass('zoom');
    $("#bigPic").removeAttr('style');
}
function pictureChange(picture_id, allow_zoom) {
    if ( picture_id > 0 ) {
        var new_big_pic = '/media/images/' + picture_id + '/proddetail/' + picture_id + '.jpg';
        var new_big_pic_zoom = '/media/images/' + picture_id + '/prodbig/' + picture_id + '.jpg';
        
        $("#bigPic").attr('href',new_big_pic_zoom);
        $("#bigPic > img").attr('src',new_big_pic);

        $("img[id^='prodsmall_']").each( function(i) {
            $(this).show();
        });
        $("#prodsmall_" + picture_id).hide();
        
        // Allow zoom if picture is an zoom picture
        if ( allow_zoom == 1 ) {
            clearZoom();
            activateZoom();
        } else {
            removeZoom();
        }
    }
}
/**
 * 
 * @return
 */
function BG_hideContent() {
    $("#contentContainer").hide();
    $("#footerContainer").hide();
    $('#showContent').show();
}
function BG_showContent() {
    $("#contentContainer").show();
    $("#footerContainer").show();
    $('#showContent').hide();
}
/**
 * checks a product if all neccessary options are selected and adds a product into Cart 
 * 
 * @return
 */
function addToCart() {
    var check = 0;
    jQuery.each($('#product').find('input[id^=quantity]'),
        function(i,element) {
            if($(this).val() > 0) {
                check += 1;
            }
        }
    );
    jQuery.each($('#product').find('select[id^=subOptionSelected]'),
        function(i,element) {
            if($(this).val() == 0) {
                check = 0;
            }
        }
    );
    if((check > 0)) {
        $('#product').submit();
        return true;
    } else {
        alert(text_add_to_cart_error);
        return false;
    }
}
/**
 * 
 * 
 * @param article_id
 * @param parent_option_ids
 * @param selected_option_ids
 * @return
 */
function fillPriceField(article_id, parent_option_ids, selected_option_ids) {    
    // load ajax images
    var loaderImage = $('#option-loader').html();
    $("#productPrice").html(loaderImage);
    $("#productPriceOld").html(loaderImage);
        
    // start ajax
    $.ajax({
        url:    '/ajax.php/product_options/price',
        type:    'POST',
        data:    {
            article_id_val: article_id,
            parent_options_ids_val: parent_option_ids,
            selected_option_ids_val: selected_option_ids
        },
        dataType: 'json',
        success: function(responseObj){
            if(responseObj.price != ''){
                // make party
                $("#productPrice").html(responseObj.price);
                if (responseObj.price_old != '') {
                    $("#productPriceOld").remove();
                    $(".pricing .floatLeft").prepend('<span class="colorRed bold fontSize12px" id="productPriceOld">Statt <span class="lineThrough">'+ responseObj.price_old +' EUR</span> jetzt nur</span>');
                } else {
                    $("#productPriceOld").remove();
                }
            }
        }
    });
}
/**
 * 
 * 
 * @param article_id
 * @param parent_option_ids
 * @param selected_option_ids
 * @return
 */
function fillDeliveryField(article_id, parent_option_ids, selected_option_ids) {
    // get base values
    var base_number = $("#base-calc-value").val();
    var base_interval = $("#base-calc-interval").val();
    
    // load ajax images
    var loaderImage = $('#option-loader').html();
    $("#deliveryTimeContainer").html(loaderImage);
    
    // start ajax
    $.ajax({
        url:    '/ajax.php/product_options/delivery',
        type:    'POST',
        data:    {
            article_id_val: article_id,
            parent_options_ids_val: parent_option_ids,
            selected_option_ids_val: selected_option_ids,
            base_number_val: base_number, 
            base_interval_val: base_interval
        },
        dataType: 'json',
        success: function(responseArray){
            if(responseArray != ''){
                var responseTextPrefix = $("#defaultDeliveryTimePrefix").val();
                var responseTextSuffix = $("#defaultDeliveryTimeSuffix").val();
                // make party
                if (responseArray.is_available == 1) {
                    $("#deliveryTimeContainer").html('<span id="deliveryTimePrefix">' + responseTextPrefix + '</span><span id="deliveryTime">'+ responseArray.delivery_time + '</span><span id="deliveryTimeSuffix">' + responseTextSuffix + '</span>');
                } else {
                    $("#deliveryTimeContainer").html('<span id="deliveryTimePrefix"></span><span id="deliveryTime">'+ responseArray.delivery_time + '</span><span id="deliveryTimeSuffix"></span>');
                } 
            }
        }
    });
}
/**
 * 
 * 
 * @param article_id
 * @param assign_id
 * @return
 */
function fillAvailabilityField(article_id, assign_id) {
    // load ajax images
    var loaderImage = $('#option-loader').html();
    $("#availabilityColor").html(loaderImage);
    
    if (assign_id == 0) {
        $("#availabilityColor").html( $("#defaultAvailabilityColor").val() );
    }

    $.ajax({
        url: '/ajax.php/product_options/availability',
        type: 'POST',
        data:  {
            article_id_val: article_id,
            assign_id_val: assign_id,
            root_option_id: $("#rootOptionIdSelected").val()
        },
        dataType: 'text',
        success: function(responseText){
            if (responseText == 'isParent') {
                $("#availabilityColor").html( $("#defaultAvailabilityColor").val() );
                
            } else if (responseText == 'notOrderable') {
                $("#availabilityColor").html('<img style="margin-top: -2px;" src="/themes/default/img/availability_red.gif" alt="red" width="22" height="22" border="0" />');
                availabilityText = 'vorübergehend ausverkauft';
                $("#availabilityColor").append('<span class="color italic georgia" style="margin-left: 5px; position: absolute; line-height: 12px; margin-top: -3px;">('+availabilityText+')</span>');
                $("#productDetail").hide();
                $("#productNotOrderable").show();
                
            } else if (responseText != '') {
                $("#productDetail").show();
                $("#productNotOrderable").hide();
                var availabilityImage = $("#availabilityColor > img");
                var availabilityText = '';
                if (responseText == 'red') { availabilityText = 'vorübergehend ausverkauft' }
                if (responseText == 'orange') { availabilityText = 'geringe Lagermenge' }
                $("#availabilityColor").html('<img style="margin-top: -2px;" src="/themes/default/img/availability_'+responseText+'.gif" alt="'+responseText+'" width="22" height="22" border="0" />');
                if ( availabilityText != '') { $("#availabilityColor").append('<span class="color italic georgia" style="margin-left: 5px; position: absolute; line-height: 12px; margin-top: 2px;">('+availabilityText+')</span>') }
            }
        }
    });
}
/**
 * Function which return mediadata on given params
 * 
 * Possible ajax-params:
 * article_id(1,2,3), type_id(1,2,3), article_chapter(1,2,3), 
 * media_return_type(images,download,..), media_attributes (rot,blau,gelb), media_definition(definition_name)
 * 
 * @param article_id
 * @param type_id
 * @return
 */
function getMedia(article_id, type_id) {
    var media_attributes_array = new Array();
    
    // get selected option names ( values )
    $("select[id^='subOptionSelected_']").each( function(i) {
        if ( $(this).val() != 0 ) {
            media_attributes_array.push( $("select[id^='subOptionSelected_'] option:selected").text() );
        }
    });
    
    // prepare for ajax 
    var media_attributes = media_attributes_array.join(", ");
    removeZoom();
    
    // load ajax images
    var loaderImage = $('#option-loader').html();
    $(".detailPage .images .smallPics").html(loaderImage);
    $("#bigPic").html(loaderImage);
    
    // start ajax
    $.ajax({
        url: '/ajax.php/media/get',
        type: 'POST',
        data:  {
            article_id_val: article_id,
            type_id_val: type_id,
            media_attributes_val: media_attributes
        },
        dataType: 'json',
        success: function(responseObj){
            // fill next select box
            if (responseObj.items.length > 0) {
                // fill images
                for ( imageCounter in responseObj.items ) {
                    // set big picture
                    if ( imageCounter == 0 ) {
                        if (responseObj.items[imageCounter].definitions.prodbig.width != '') {
                            $("#bigPic").attr('href',responseObj.items[imageCounter].url+'/prodbig/'+responseObj.items[imageCounter].url_filename);
                        }
                        if (responseObj.items[imageCounter].definitions.proddetail.width != '') {
                            $("#bigPic").html('<img border="0" width="'+responseObj.items[imageCounter].definitions.proddetail.width+'" height="'+responseObj.items[imageCounter].definitions.proddetail.height+'" alt="'+responseObj.items[imageCounter].title+'" src="'+ responseObj.items[imageCounter].url+'/proddetail/'+responseObj.items[imageCounter].url_filename +'" title="'+responseObj.items[imageCounter].title+'">');
                        }
                        // remove loader for small pictures
                        $(".detailPage .images .smallPics").html('');
                        
                        for ( attributeCounter in responseObj.items[imageCounter].attributes ) {
                            if ( responseObj.items[imageCounter].attributes[attributeCounter].fieldname == 'show_zoom' && responseObj.items[imageCounter].attributes[attributeCounter].value == '1') {
                                activateZoom();
                            }
                        }
                    }
                    
                    // set small pictures
                    if ( responseObj.items[imageCounter].definitions.prodsmall.width != '') {
                        show_zoom = 0;
                        for ( attributeCounter in responseObj.items[imageCounter].attributes ) {
                            if ( responseObj.items[imageCounter].attributes[attributeCounter].fieldname == 'show_zoom' && responseObj.items[imageCounter].attributes[attributeCounter].value == '1') {
                                show_zoom = 1;
                            }
                        }
                        if (imageCounter == 0) {
                            $(".detailPage .images .smallPics").append('<img id="prodsmall_'+responseObj.items[imageCounter].media_id+'" class="hide" onclick="pictureChange(\''+responseObj.items[imageCounter].media_id+'\',\''+show_zoom+'\')" border="0"width="'+responseObj.items[imageCounter].definitions.prodsmall.width+'" height="'+responseObj.items[imageCounter].definitions.prodsmall.height+'" alt="'+responseObj.items[imageCounter].title+'" src="'+ responseObj.items[imageCounter].url+'/prodsmall/'+responseObj.items[imageCounter].url_filename +'" title="'+responseObj.items[imageCounter].title+'">');
                        } else {
                            $(".detailPage .images .smallPics").append('<img id="prodsmall_'+responseObj.items[imageCounter].media_id+'" onclick="pictureChange(\''+responseObj.items[imageCounter].media_id+'\',\''+show_zoom+'\')" border="0"width="'+responseObj.items[imageCounter].definitions.prodsmall.width+'" height="'+responseObj.items[imageCounter].definitions.prodsmall.height+'" alt="'+responseObj.items[imageCounter].title+'" src="'+ responseObj.items[imageCounter].url+'/prodsmall/'+responseObj.items[imageCounter].url_filename +'" title="'+responseObj.items[imageCounter].title+'">');
                        }
                    }
                }
                // remove loader for small pictures if there are none
                if (responseObj.items.length <= 1) {
                    $(".detailPage .images .smallPics").html('');
                }
            }
        }
    });
}
/**
 * 
 * 
 * @param article_id
 * @param assign_id
 * @param select_id
 * @param customer_group_id
 * @param count
 * @return
 */
function fillCartValues(article_id, assign_id, select_id, customer_group_id, count) {
    $('#option-children-'+ select_id).html('');
    var parent_option_ids_array = new Array();
    var selected_option_ids_array = new Array();
    var back_to_defaults = 0;
    
    // get base values
    var option_id = 0;
    var root_option_id_selected = $('#rootOptionIdSelected').val();
    
    // get parent option ids ( names )
    $("div[id^='option-children-']").each( function(i) {
        tempArray = $(this).attr('id').split('-');
        parent_option_ids_array.push( tempArray['2'] );
    });
    
    // get selected option ids ( values )
    $("select[id^='subOptionSelected_']").each( function(i) {
        if ( $(this).val() == 0 ) {
            back_to_defaults += 1;
        }
        selected_option_ids_array.push( $('#assign_id_' + parent_option_ids_array[i] + '_' + $(this).val() ).val() );
    });
    
    // prepare for ajax 
    var parent_option_ids = parent_option_ids_array.join(", ");
    var selected_option_ids = selected_option_ids_array.join(", ");

    if ( count == 0 ) {
        assign_id = $('#assign_id_'+select_id+'_'+assign_id).val();
    } else {
        assign_id = selected_option_ids_array[count];
    }
    
    if(assign_id > 0) {
        // load ajax images
        $('#option-loader').fadeIn('fast');
        $('#addToCartButton').attr('disabled',true);
        
        // start ajax
        $.ajax({
            url: '/ajax.php/product_options/get',
            type: 'POST',
            data:  {
                article_id_val: article_id,
                assign_id_val: assign_id,
                select_id_val: select_id,
                customer_group_id_val: customer_group_id,
                count_val: count,
                preselected: $('#preselected-options').html()
            },
            dataType: 'json',
            success: function(responseObj){
                // fill next select box
                if (responseObj.return_code != 'last') {
                    selectObj[count] = responseObj;
                    $('#option-children-'+select_id).append(selectObj[count].option_name.replace("Optionszweig ", "") + '<br />');
                    $('#option-children-'+select_id).append('<select id="subOptionSelected_' + selectObj[count].select_field.assign_id + '" name="sub_options_selected[' + selectObj[count].select_field.article_id + '][' + root_option_id_selected + '][]" onchange="fillCartValues(' + selectObj[count].select_field.article_id + ',' + selectObj[count].select_field.this_val + ',' + selectObj[count].select_field.select_id + ',' + selectObj[count].select_field.customer_group_id + ', ' + selectObj[count].select_field.count + ');">');
                    for ( key in selectObj[count].select_field.options ) {
                        $('#option-children-'+select_id+' > select').append('<option ' + selectObj[count].select_field.options[key].selected + ' value="' + selectObj[count].select_field.options[key].value + '" >' + selectObj[count].select_field.options[key].title + '</option>');
                    }
                    $('#option-children-'+select_id).append('</select>');
                    $('#option-children-'+select_id).append('<div class="option_list_container childOption" id="option-children-' + selectObj[count].div.select_id + '">');
                        for ( key in selectObj[count].select_field.options ) {
                            if ( selectObj[count].select_field.options[key].value > 0 ) {
                                $('#option-children-'+select_id).append('<input type="hidden" id="assign_id_' + selectObj[count].select_field.select_id + '_' + selectObj[count].select_field.options[key].value + '" value="' + selectObj[count].select_field.options[key].product_option_assign_id + '">');
                                $('#option-children-'+select_id).append('<input type="hidden" name="root_assign_id_' + $('#rootOptionIdSelected').val() + '_' + selectObj[count].select_field.options[key].value + '" id="root_assign_id_' + $('#rootOptionIdSelected').val() + '_' + selectObj[count].select_field.options[key].value + '" value="' + selectObj[count].select_field.options[key].product_option_assign_id + '">');
                            }
                        }
                    $('#option-children-'+select_id).append('</div>');
                    
                }
                // if last option execute following
                if (responseObj.return_code == 'last') {
                    // fill availability field
                    fillAvailabilityField(article_id, selected_option_ids_array[count]);
                } else {
                    $("#availabilityColor").html( $("#defaultAvailabilityColor").val() );
                }
                // fill delivery field
                fillDeliveryField(article_id, parent_option_ids, selected_option_ids);
                
                // hide ajax images
                $('#option-loader').fadeOut('fast');
                $('#addToCartButton').attr('disabled',false);

                if (responseObj.return_code != 'last') {
                    
                    if($('#subOptionSelected_' + selectObj[count].select_field.assign_id + ' option:selected').val() != 0) { 
                        $('#subOptionSelected_' + selectObj[count].select_field.assign_id).trigger('change');
                    }
                    else if($('#subOptionSelected_' + selectObj[count].select_field.assign_id + ' option').length == 2) {
                        //only 1 element and the phrase "please choose"
                        jQuery.each($('#subOptionSelected_' + selectObj[count].select_field.assign_id + ' option'),
                            function(i,element) {
                                if(i == 1 && $(this).val() > 0) {
                                    // set first product option here, which comes right after the phrase "please choose". then trigger the onchange event
                                    $('#subOptionSelected_' + selectObj[count].select_field.assign_id).val($(this).val()).trigger('change');
                                    $('#subOptionSelected_' + selectObj[count].select_field.assign_id).val($(this).val()).find('option:first').remove();
                                }
                            }
                        );
                    }
                }
            }
        });
    }
    
    $("input[id^='optionSelected']").attr('name','option_selected[' + article_id + '][' + root_option_id_selected + ']');
    $("input[id^='optionSelected']").val( $('#options-article-id-' + root_option_id_selected).val() );
    $('#quantity').attr('name', 'quantity[' + article_id + '][' + root_option_id_selected + ']');
    
    // fill price field
    if ( back_to_defaults == 0 && assign_id > 0) {
        fillPriceField(article_id, parent_option_ids, selected_option_ids);
    } else {
        // if no option selecte ( value = 0 ) then fill in defaults!
        $("#productPrice").html( $("#defaultPrice").val() );
        $("#deliveryTimeContainer").html( $("#defaultDeliveryTimePrefix").val() + $("#defaultDeliveryTime").val() + $("#defaultDeliveryTimeSuffix").val() );
        $("#availabilityColor").html( $("#defaultAvailabilityColor").val() );
    }
}
