var promo;

document.observe("dom:loaded", function() { 
	if ($('ajax-loader')) {
		$('ajax-loader').hide();
		}
		
	if ($('vat-form')) {
		check_vat_form();
		$$('fieldset#vat-form input').each(function(i){
			i.observe('click', function(e) {
				check_vat_form();
			});
		});
		
		$('submit-button-confirm').observe('click', function(e){
			show_ajax_loader();
			$$('fieldset#vat-validate-form ul').each(function(f){
			f.remove();
		})
		});
		
		
		

	}
	
	if ($('vat-validate-form')) {
		$('vat-validate-form-button').observe('click', validate_vat);	
	}
	
	if ($('select-package')) {
		add_decrease_increase_buttons($$('input.quantity-input'));
	}
	
	if( $('back-button')) {
		$('back-button').observe('click', history_back);	
	}
	
		
	if(	$('create-promotion-form') || 
		$('create-store-form') ||
		$('collection-information') ||
		$('edit-store-details-form') ||
		$('edit-promotion-details-form')) {

		makeItCount('txa_description', 256);
		makeItCount('txa_terms_of_use', 256);
		makeItCount('txt_tag_line', 64);
		makeItCount('txt_store_name', 32);
		makeItCount('txt_name', 32);
		
		if($('txa_description'))
		{
			$('txa_description').observe('keypress', stopReturn);
		}
		
		if($('txa_terms_of_use'))
		{
			$('txa_terms_of_use').observe('keypress', stopReturn);
		}
	}
    
    if($('promotion-details')) {
    	var url_id = location.href.split('/')[location.href.split('/').indexOf("view") + 1];
   		var surl = "http://" + location.host + "/deals/promotions/get-promotion-info/" + url_id;
   		    	
   		new Ajax.Request(surl, {
			method:'get',
		  	onSuccess: function(transport){
		    	promo = transport.responseText.evalJSON();
		    	$('info-link').observe('click', change_promo_viewport);
        		$('map-link').observe('click', change_promo_viewport);
		   }
		});
		

    }
    
    if($('slt_select_store')) {
        $('slt_select_store').observe('change', load_retailers);
    }
    
	if($('promotion-usage-section')) {
		
		$('id_bool_unlimited_usages').observe('click', function(e) {
			if(this.checked) {
				$$('#frequency-fields input').each(function(item) {
					$('txt_usages_per_frequency').value="";
				});
			}
		});
	
		$('txt_usages_per_frequency').observe('keyup', function(e) {
			if(this.value) {
				$('id_bool_unlimited_usages').checked=false;
			}
		});
	
	
		$('id_bool_unlimited_maximum_usages').observe('click', function(e) {
			if(this.checked) {
				$('txt_total_volume').value="";
			}	
		});
	
		$('txt_total_volume').observe('keyup', function(e) {
			if(this.value) {
				$('id_bool_unlimited_maximum_usages').checked=false;
			}
		});
	}
	
    if($('slt_billing_infos')) {
        $('slt_billing_infos').observe('change', load_billing_info);
    }    
    
    if($$('a.a_cancel')) {
        $$('a.a_cancel').invoke('observe', 'click', remove_success_message);
    }
    
    if($$('a.close')) {
        $$('a.close').invoke('observe', 'click', remove_success_message);
    }
    
    if($$('a.a_view_retailer')) {
        $$('a.a_view_retailer').invoke('observe', 'click', view_retailer);
        $$('tr.retailer_info').invoke('toggle');
    }
    
    if($('brand_city_results')) {
        new Ajax.Autocompleter('city', 'brand_city_results', '/deals/stores/filter-cities', {
            paramName: "text"
    	});
    }
    
    if($('retailer_city_results')) {    	
    	new Ajax.Autocompleter('retailer_city', 'retailer_city_results', '/deals/stores/filter-cities', {
    				paramName: "text"
    		   		});
    }
    
    if($('collection_city_results')) {    	
    	new Ajax.Autocompleter('txt_city', 'collection_city_results', '/deals/stores/filter-cities', {
    				paramName: "text"
    		   		});
    }    

    if($('billing_city_results')) {    	
    	new Ajax.Autocompleter('txt_city', 'billing_city_results', '/deals/stores/filter-cities', {
    				paramName: "text"
    		   		});
    } 

    if($('account_city_results')) {    	
    	new Ajax.Autocompleter('txt_city', 'account_city_results', '/deals/stores/filter-cities', {
    				paramName: "text"
    		   		});
    }
     
    if($('slt_select_store')) {
        
        $('toggle-stores-button').hide();
        
        var brand_id = $('slt_select_store').value;
        if(brand_id != 0) {

           var elements = $$('input.checked_retailers');
           var url = '/deals/promotions/load-retailers/'+brand_id;
           
           new Ajax.Request(url, {
                method: 'get',
                onSuccess: function(transport) {
                    
                    $('stores-viewport').update(transport.responseText);
                    
                    var retailers = $$('input.retailer');
                                        
                    retailers.each(function(r) {
                        r.checked = true;
                        elements.each(function(s) {
                            if(r.value == s.value) {
                                $(r.id).checked = true;
                            } else {
                                $(r.id).checked = false;
                            }
                        });
                        
                    });
                    $('toggle-stores-button').show();
                    $('toggle-stores-button').observe('click', toggle_retailers);
                }
            });
        }

    }
    
    if($('slt_billing_infos')) {
        var billing_info_id = $('slt_billing_infos').value;
        if(billing_info_id != 0) {
           
           var url = '/deals/promotions/load-billing-info/'+billing_info_id;

           new Ajax.Request(url, {
                method: 'get',
                onSuccess: function(transport) {
                    
                    var response = transport.responseText;
                    if(response.search('no-funds') != -1) {
                        $('publish-step3').hide();
                    } else {
                        $('publish-step3').show();
                    }
                    
                    $('billing_info_viewport').update(response);
                }
            });
        }
    }
    
    if($('retailer_store_details')) {
        $('id_separate_retailer_info').observe('click', toggle_retailer_info);
        if($('id_separate_retailer_info').checked) {
        	$('retailer_store_details').show();
        	}
        	else {
        	$('retailer_store_details').hide();
        	}
    }
    
    if($$('div.more_info')) {
        $$('div.more_info').invoke('toggle');
        $$('a.a_more_info').invoke('observe', 'click', toggle_help_text);
    }
    
    if($('store-categories-wrap')) {
        $$('#store-categories-wrap input').invoke('observe', 'click', check_nr_of_checkboxes);
        check_nr_of_checkboxes();
    }
    
    if($$('div.legal')) {
        $$('div.legal').invoke('toggle');
        $$('a.legal').invoke('observe', 'click', toggle_legal);
    }
    

    if($('default-artwork-wrap')) {
        highlight_initial_default_image();
        $$('#default-artwork-wrap label').invoke('observe', 'click', highlight_selected_image);
        $$('input.file_img_upload').invoke('observe', 'change', deselect_default_image);

    }
    
    if($('edit_brand_details_message')) {
        refresh_image('store_logo');
    }
    
    
    if($('edit_brand_details_message')) {
        refresh_image('store_logo');
    }
    
    if($('edit_promotion_image_message')) {
        refresh_image('img_artwork');
    }
    
    if($('select-package')) {
        $$('div.credit-package').invoke('observe', 'click', select_credit_package);
        $$('div.credit-package').invoke('observe', 'mouseover', set_package_hover).invoke('observe', 'mouseout', remove_package_hover);
    }

	if($('promotion-validity-section')) {
		$$('#promotion-validity-section input').each(function(item) {
			item.readOnly = true;
		});
	}
            
});

function show_ajax_loader() {
	$('ajax-loader').show();
}

function hide_ajax_loader() {
	$('ajax-loader').hide();
}

function check_vat_form() {
	if($('choose-vat_0').checked) {
		$('vat-validate-form').hide();
	} else {
		$('vat-validate-form').show();
	}
	}
	
function validate_vat(e) {
	YAHOO.util.Event.preventDefault(e);

	$$('fieldset#vat-validate-form ul').each(function(f){
		f.remove();
	});
	var el = Event.element(e);
	var url = '/deals/billing/validate-vat/?vat='+$('vat_number').value;
	var valid = false;
	var msg;
	var response;
	
	el.disabled = 'disabled';
	
	show_ajax_loader();
	new Ajax.Request(url, {
	  method: 'get',
	  onSuccess: function(transport) {
		  response = transport.responseText.split(';');
		  valid = response[0];
		  msg = response[1];
		  
		  if (valid=='false') {
		  	$('vat-validate-form').insert({ top: '<ul class="errorlist"><li>' + msg + '</li></ul>' });
		  } else {
		  	$('vat-validate-form').insert({ top: '<ul class="succedlist"><li>' + msg + '</li></ul>' });
		  }
		  
		  hide_ajax_loader();
		  el.disabled = '';
		  
	  },
	  onComplete: function(transport) {

	  }
	});
}

function add_decrease_increase_buttons(fields) {
	
	fields.each(function(item) {
      		item.insert({before:'<span class="quantity-input-decrease quantity-input-button"><img src="/kaskado-media/internal/image/deals/minus.png" /></span>'});
      		item.insert({after:'<span class="quantity-input-increase quantity-input-button"><img src="/kaskado-media/internal/image/deals/plus.png" /></span>'});
      		item.setAttribute('readOnly',true);
      		
	});
	
	$$('span.quantity-input-decrease').invoke('observe', 'click', decrease_package_quantity);
	$$('span.quantity-input-increase').invoke('observe', 'click', increase_package_quantity);
}

function decrease_package_quantity(event) {
	if (parseInt(this.next(0).value) <=0) {
		
	} else {
		this.next(0).value = parseInt(parseInt(this.next(0).value) - 1);
	}
}

function increase_package_quantity(event) {
	this.previous(0).value = parseInt(this.previous(0).value) + 1;
}

function change_promo_viewport(event) {
	
	if (this.hasClassName('promo_viewport_link_selected')) { 
		$('info-link').update('Details');
		$('map-link').update('Map');
		$('info-link').removeClassName('promo_viewport_link_selected');
		$('map-link').removeClassName('promo_viewport_link_selected');
				
		$('promo_viewport_update').update('Image');	
		$('promo_viewport_update').update('<img src="' + promo.image + '" id="img_promotion"/>');
		
	} else {
		
		$('info-link').update(gettext('Details'));
		$('map-link').update(gettext('Map'));
		$('info-link').removeClassName('promo_viewport_link_selected');
		$('map-link').removeClassName('promo_viewport_link_selected');
		
		this.update(gettext('Flip back'));
		this.addClassName('promo_viewport_link_selected');
		
		if (this.match('a#info-link')) {
			$('promo_viewport_update').update('<div class="promotion-description promotion-text"> <p>' + promo.description + '<p/></div>' + '<div class="promotion-terms promotion-text"><h3 id="terms-of-use">Terms of Use</h3><p>' + promo.terms_of_use + '</p></div>');
		} else if (this.match('a#map-link')) {
			$('promo_viewport_update').update('<img src="' + promo.map_url + '" id="img_promotion"/>');
		} else {
			$('promo_viewport_update').update(gettext('Error'));
		}
	}
}

function select_credit_package(event) {
    $$('div.credit-package').invoke('removeClassName', 'selected').invoke('removeClassName', 'hover');
    this.addClassName('selected');
}

function set_package_hover(event) {
    this.addClassName('hover');
}

function remove_package_hover(event) {
    $$('div.credit-package').invoke('removeClassName', 'hover');
}

function toggle_terms_of_sales(event) {
    
}

function refresh_image(image) {
    var obj = document.getElementById(image);
    var src = obj.src;
    var pos = src.indexOf('?');
    if (pos >= 0) {
        src = src.substr(0, pos);
    }
    var date = new Date();
    obj.src = src + '?v=' + date.getTime();
    return false;
}

function toggle_legal(event) {
    Event.stop(event);
    
    var element = this.rel;
    $(element).toggle();
    
}

function check_nr_of_checkboxes(event) {
    
    var boxes = 0;
        
    $$('#store-categories-wrap input').each(function(i) {
        if(i.checked) {
            boxes += 1;
        } 
    });
    
    if(boxes > 2) {
        $$('#store-categories-wrap input').each(function(i) {
            if(!i.checked) {
                i.disabled = true;
            } 
        });
    }
    
    if(boxes < 3) {
        $$('#store-categories-wrap input').each(function(i) {
            if(!i.checked) {
                i.disabled = false;
            } 
        });
    }
}

// Marks the selected default image when clicked on.
function highlight_selected_image(event) {
    
    var use_default = true;
    
    $$('input.file_img_upload').each(function(element) {
        if(element.getValue()) {
            if(use_default = use_default_image()) {
                element.clear();
                $('place-holder').replace('<span id="place-holder"></span>');
                $('image-preview').removeClassName('preview');
            } else {
                Event.stop(event);
            }
        }
    });
    
    if(use_default) {
        
        Event.stop(event);
        
        if($('id_image')) {
            var file_element = new Element('input', {'type': 'file', 'name': 'image', 'id': 'id_image', 'class': 'file_img_upload'});
            $('id_image').replace(file_element);
        }
        
        if($('id_logotype')) {
            var file_element = new Element('input', {'type': 'file', 'name': 'logotype', 'id': 'id_logotype', 'class': 'file_img_upload'});
            $('id_logotype').replace(file_element);
        }
        
        $$('#default-artwork-wrap label').invoke('removeClassName', 'selected');
        this.addClassName('selected'); 
        this.down('input').checked = true;
    }

}

function use_default_image() {
    var use = confirm(gettext('Do you want to use the default image instead of the image you have uploaded?'));
    return use;
}

// Marks the selected default image when the page is loaded
function highlight_initial_default_image() {

    $$('#default-artwork-wrap input').each(function (element) {

        if(element.checked) {
            element.up(0).addClassName('selected');
        }
    });

}

function deselect_default_image(event) {

    $$('#default-artwork-wrap label').invoke('removeClassName', 'selected');
    
    $$('#default-artwork-wrap input').each(function (element) {
        if(element.checked) {
            element.checked = false;
        }
    });
    
}

function load_retailers(event) {
    var url = '/deals/promotions/load-retailers/'+this.value;
    new Ajax.Request(url, {
      method: 'get',
      onSuccess: function(transport) {
          $('stores-viewport').update(transport.responseText);
          
          $$('input.retailer').each(function(r) {
              r.checked = true;
          });
          
          $('toggle-stores-button').show();
          $('toggle-stores-button').observe('click', toggle_retailers);
      }
    });
    
}

function toggle_retailers(event) {
    Event.stop(event);
    
    var element = $('stores-select-text');
    
    if($('stores-select-text').hasClassName('deselect')) {
        
        $$('input.retailer').each(function(r) {
            r.checked = false;
        });
        
		
        element.removeClassName('deselect').addClassName('selected');
        element.title=gettext("Select all");
	element.update(element.title);
	
        
        
    } else {
        
        $$('input.retailer').each(function(r) {
            r.checked = true;
        });
        
        element.removeClassName('selected').addClassName('deselect');

	element.title=gettext('Deselect all');
	element.update(element.title);
        
    }
    
}

function load_billing_info(event) {
    var url = '/deals/promotions/load-billing-info/'+this.value;

    new Ajax.Request(url, {
      method: 'get',
      onSuccess: function(transport) {
          
          var response = transport.responseText;
          if(response.search('no-funds') != -1) {
              $('publish-step3').hide();
          } else {
              $('publish-step3').show();
          }
          
          $('billing_info_viewport').update(response);
          
      }
    });
    
}

function remove_success_message(event) {
    Event.stop(event);
    $$('div.success-message').invoke('remove');
}

function view_retailer(event) {
    
    Event.stop(event);
    element = this.rel;
    link = this.id
        
    if($(element).hasClassName('close')) {
        $(element).removeClassName('close')
        $(link).update('view');
    } else {
        $(element).addClassName('close');
        $(link).update('close');
    }

    $(element).toggle();
}

function toggle_retailer_info() {
    $('retailer_store_details').toggle();
}

function toggle_help_text(event) {

    Event.stop(event);
    element = this.rel;
    link = this.id

    $(element).toggle();

}

// Yahoo file uploader
function init() {
    
    var upload_image = function(e) {
        YAHOO.util.Event.preventDefault(e);
        var kind = this.rel;
        var form = this.rev;

        var file_elements = YAHOO.util.Dom.getElementsByClassName('file_img_upload');

        if(file_elements[0].value) {
            //the second argument of setForm is crucial,
            //which tells Connection Manager this is a file upload form
            YAHOO.util.Connect.setForm(form, true);

            var upload_handler = {
                upload: function(o) {
                    
                    var str_error = o.responseText;
                    if(str_error.match('Error')) {
                        alert(str_error.slice(9, -2));
                    } else {
                        var el = YAHOO.util.Dom.get('image-preview');
                        var img = document.createElement('img');
                        img.src = o.responseText;
                        img.id = 'place-holder';
                        YAHOO.util.Dom.addClass('image-preview', 'preview');
                        el.replaceChild(img, YAHOO.util.Dom.get('place-holder'));   
                    }
                }
            };
            YAHOO.util.Connect.asyncRequest('POST', '/deals/promotions/upload-image/'+kind+'/', upload_handler);
        } else {
            alert(gettext('Please use the browse button to select an image before previewing it.'));
        }
    };
    
  YAHOO.util.Event.on('preview-button', 'click', upload_image);
  
}
YAHOO.util.Event.on(window, 'load', init);

YAHOO.namespace("kaskado.calendar"); 
YAHOO.kaskado.calendar.init = function() {
    var todays_date = new Date();
    YAHOO.kaskado.calendar.cal1StartTime = new YAHOO.widget.Calendar("cal1","cal1StartTime", {title: "Promotion start date", minDate: todays_date});
    YAHOO.kaskado.calendar.cal1StartTime.cfg.setProperty("DATE_FIELD_DELIMITER", ".");
    YAHOO.kaskado.calendar.cal1StartTime.selectEvent.subscribe(handleSelect, YAHOO.kaskado.calendar.cal1StartTime, true);
    YAHOO.kaskado.calendar.cal1StartTime.render();
    
    YAHOO.kaskado.calendar.cal2EndTime = new YAHOO.widget.Calendar("cal2","cal2EndTime", {title: "Promotion end date", minDate: todays_date});
    YAHOO.kaskado.calendar.cal2EndTime.selectEvent.subscribe(handleSelect, YAHOO.kaskado.calendar.cal2EndTime, true);
    YAHOO.kaskado.calendar.cal2EndTime.render();

    YAHOO.util.Event.addListener(["calendar-start-time-img", "calendar-end-time-img"], "click", show_calendar);
    
} 

YAHOO.util.Event.onDOMReady(YAHOO.kaskado.calendar.init);

function show_calendar(e) {
        
    var cal1 = YAHOO.util.Dom.get("cal1StartTime");
    var cal2 = YAHOO.util.Dom.get("cal2EndTime");
    if(YAHOO.util.Dom.hasClass(cal1, "calendar-hidden")) {
        YAHOO.util.Dom.replaceClass(cal1, "calendar-hidden", "calendar-visible");
        YAHOO.util.Dom.replaceClass(cal2, "calendar-hidden", "calendar-visible");
    } else {
        YAHOO.util.Dom.replaceClass(cal1, "calendar-visible", "calendar-hidden");
        YAHOO.util.Dom.replaceClass(cal2, "calendar-visible", "calendar-hidden");
    }

}

function handleSelect(type, args, obj) {

    var dates = args[0]; 
    var date = dates[0]; 
    var year = date[0], month = date[1], day = date[2];
    var elements = YAHOO.util.Dom.getElementsByClassName(obj.containerId, 'input');
    
    if(month < 10) {
        month = '0'+month;
    }
    
    if(day < 10) {
        day = '0'+day;
    }
    
    var txt_field = document.getElementById(elements[0].id); 
    txt_field.value = year + "-" + month + "-" + day; 
    var txt_field_anim = new YAHOO.util.ColorAnim(txt_field, {backgroundColor: { from: '#ccffcc', to: '#ffffff' }, borderColor: { from: '#009900', to: '#cccccc' } }); 
    txt_field_anim.animate();  

}

function charCounter(id, maxlimit, limited)
{
	if (!$('counter-'+id))
	{
		$(id).previous().update($(id).previous().innerHTML + ". " + '<span id="counter-'+id+'"></span>');
	}
	
	if($F(id).length >= maxlimit)
	{
		if(limited)
		{	
			$(id).value = $F(id).substring(0, maxlimit);
		}
		$('counter-'+id).addClassName('charcount-limit');
		$('counter-'+id).removeClassName('charcount-safe');
	} 
	else 
	{	
		$('counter-'+id).removeClassName('charcount-limit');
		$('counter-'+id).addClassName('charcount-safe');
	}
	
	$('counter-'+id).update( $F(id).length + '/' + maxlimit );				
}
	
function makeItCount(id, maxsize, limited)
{
	if(limited == null) 
		limited = true;
	
	if ($(id))
	{
		Event.observe($(id), 'keyup', function(){charCounter(id, maxsize, limited);}, false);
		Event.observe($(id), 'keydown', function(){charCounter(id, maxsize, limited);}, false);
		
		charCounter(id,maxsize,limited);
	}
}

function history_back()
{
	parent.history.back();
}

//Stops the event if it is a return key press
function stopReturn(event)
{		
	var key = event.keyCode;
	if(key == 13)
		event.stop();
}

