/* core.js */

/**
 * Browser detect
 */
$.browser.ie6 = $.browser.msie && (parseInt(navigator.appVersion) <= 6);

/**
 * Location functions
 */
function go(link, target) {
	if (!target) {
		target = document;
	}
	target.location = link;
}


/**
 * Page onload functions handling
 */
var load = {
	funcs: [],
	register: function(f) {
		if (typeof(f) != 'function') return;
		load.funcs.push(f);
	},
	execute: function() {
		for (var i = 0; i < load.funcs.length; i++) {
			load.funcs[i]();
		}
	}
};
$(document).ready(load.execute);



load.register(function(){
	
	$('table thead').each(function(){
		var ths = $('th', this);
		ths.filter(':eq(0)').addClass('first-child');
		ths.filter(':last').addClass('last-child');
	});

	$('#wrap').find('a.expand').click(function(){
		$(this).hide().next('span.hide').removeClass('hide');
		return false;
	});

});

var Config = {};


/* public.js */

function addJS(id, url)
{
	var js,
		d = document,
		fjs = d.getElementsByTagName('script')[0];
	if (d.getElementById(id)) return;
	js = d.createElement('script');
	js.id = id;
	js.src = url;
	fjs.parentNode.insertBefore(js, fjs);
}

load.register(function(){
	
	$('textarea').each(function()
	{
		var textarea = $(this).css({resize:'none', 'overflow-y':'hidden'}),
			origHeight = textarea.height(),
			limit = 600,
			clone = (function(){
				// Properties which may effect space taken up by chracters:
				var props = ['height','width','lineHeight','textDecoration','letterSpacing'],
				propOb = {};
				// Create object of styles to apply:
				$.each(props, function(i, prop){
					propOb[prop] = textarea.css(prop);
				});		
				// Clone the actual textarea removing unique properties
				// and insert before original textarea:
				return textarea.clone().removeAttr('id').removeAttr('name').css({
					position: 'absolute',
					top: 0,
					left: -9999
				}).css(propOb).attr('tabIndex','-1').insertBefore(textarea);
			})(),
			lastScrollTop = null,
			updateSize = function()
			{
				var self = $(this);
				// Prepare the clone:
				clone.height(0).val(self.val()).scrollTop(10000);

				// Find the height of text:
				var scrollTop = Math.max(clone.scrollTop(), origHeight) + 0,
					toChange = self.add(clone);

				// Don't do anything if scrollTop hasn't changed:
				if (lastScrollTop === scrollTop) { return; }
				lastScrollTop = scrollTop;

				// Check for limit:
				if ( scrollTop >= limit) {
					toChange.height(limit);
					self.css('overflow-y','');
					return;
				}

				// Either animate or directly apply height:
				toChange.height(scrollTop);
			};

		// Bind namespaced handlers to appropriate events:
		textarea
			.unbind('.dynSiz')
			.bind('keyup.dynSiz', updateSize)
			.bind('keydown.dynSiz', updateSize)
			.bind('change.dynSiz', updateSize);
	});


	if ($('#fb-root').length)
		addJS('facebook-jssdk', '//connect.facebook.net/en_US/all.js#xfbml=1');

	if ($('#share').length)
		addJS('addthis-js', '//s7.addthis.com/js/250/addthis_widget.js#pubid=ra-4f0c6ef22fc0506d');

});

/* Products.js */
var ShopProducts = 
{
	init: function()
	{
		$('div.contentItemProds dd.url').each(function(){
			var url = this.innerHTML;
			$(this).html('<a href="http://' + url + '" target="_blank">' + url + '</a>');
		});

		this.gallery1();
	},
	gallery1: function()
	{
		if (!$('#gallery1').length)
			return;

		var i = 1, n = $('#gallery1 .slider > ul > li').each(function(){
			$(this).addClass('slider-' + (i++));
		}).length;
		$('#gallery1').
			append('<p class="prev inactive"><a href="#">Previous</a></p>').
			append('<p class="next"><a href="#">Next</a></p>');
		$('#gallery1 .slider').jCarouselLite({
			btnPrev: '#gallery1 .prev a',
			btnNext: '#gallery1 .next a',
			visible: 2,
			scroll: 1,
			speed: 300,
			auto: false,
			circular: false,
			afterEnd: function(li){
				var i = parseInt(li[0].className.split('-')[1]);
				$('#gallery1 .prev')[((i == 1) ? 'addClass' : 'removeClass')]('inactive');
				$('#gallery1 .next')[((i == n - 1) ? 'addClass' : 'removeClass')]('inactive');
			}			
		});
	}
};
load.register(function(){ShopProducts.init()});
/* jcarousellite_1.0.1.min.js */
(function($){$.fn.jCarouselLite=function(o){o=$.extend({btnPrev:null,btnNext:null,btnGo:null,mouseWheel:false,auto:null,speed:200,easing:null,vertical:false,circular:true,visible:3,start:0,scroll:1,beforeStart:null,afterEnd:null},o||{});return this.each(function(){var b=false,animCss=o.vertical?"top":"left",sizeCss=o.vertical?"height":"width";var c=$(this),ul=$("ul",c),tLi=$("li",ul),tl=tLi.size(),v=o.visible;if(o.circular){ul.prepend(tLi.slice(tl-v-1+1).clone()).append(tLi.slice(0,v).clone());o.start+=v}var f=$("li",ul),itemLength=f.size(),curr=o.start;c.css("visibility","visible");f.css({overflow:"hidden",float:o.vertical?"none":"left"});ul.css({margin:"0",padding:"0",position:"relative","list-style-type":"none","z-index":"1"});c.css({overflow:"hidden",position:"relative","z-index":"2",left:"0px"});var g=o.vertical?height(f):width(f);var h=g*itemLength;var j=g*v;f.css({width:f.width(),height:f.height()});ul.css(sizeCss,h+"px").css(animCss,-(curr*g));c.css(sizeCss,j+"px");if(o.btnPrev)$(o.btnPrev).click(function(){return go(curr-o.scroll)});if(o.btnNext)$(o.btnNext).click(function(){return go(curr+o.scroll)});if(o.btnGo)$.each(o.btnGo,function(i,a){$(a).click(function(){return go(o.circular?o.visible+i:i)})});if(o.mouseWheel&&c.mousewheel)c.mousewheel(function(e,d){return d>0?go(curr-o.scroll):go(curr+o.scroll)});if(o.auto)setInterval(function(){go(curr+o.scroll)},o.auto+o.speed);function vis(){return f.slice(curr).slice(0,v)};function go(a){if(!b){if(o.beforeStart)o.beforeStart.call(this,vis());if(o.circular){if(a<=o.start-v-1){ul.css(animCss,-((itemLength-(v*2))*g)+"px");curr=a==o.start-v-1?itemLength-(v*2)-1:itemLength-(v*2)-o.scroll}else if(a>=itemLength-v+1){ul.css(animCss,-((v)*g)+"px");curr=a==itemLength-v+1?v+1:v+o.scroll}else curr=a}else{if(a<0||a>itemLength-v)return;else curr=a}b=true;ul.animate(animCss=="left"?{left:-(curr*g)}:{top:-(curr*g)},o.speed,o.easing,function(){if(o.afterEnd)o.afterEnd.call(this,vis());b=false});if(!o.circular){$(o.btnPrev+","+o.btnNext).removeClass("disabled");$((curr-o.scroll<0&&o.btnPrev)||(curr+o.scroll>itemLength-v&&o.btnNext)||[]).addClass("disabled")}}return false}})};function css(a,b){return parseInt($.css(a[0],b))||0};function width(a){return a[0].offsetWidth+css(a,'marginLeft')+css(a,'marginRight')};function height(a){return a[0].offsetHeight+css(a,'marginTop')+css(a,'marginBottom')}})(jQuery);
/* Items.js */
var ContentItems = {
	init: function() {
//		this.testimonials();
		setInterval(this.quotes, 10000);
		this.faq();
	},
	quotes: function(){
		var li = $('#quotes li:visible');
		($.support.opacity ? li.fadeOut(400) : li.hide());
		var lin = li.next();
		if (!lin.length)
			lin = $('#quotes li:eq(0)');
		($.support.opacity ? lin.fadeIn(600) : lin.show());
	},

/*
	cached: [0, 0, '0', [], 0],
	testimonials: function() {
		var t = $('#testimonials');
		if (!t.length) {
			return false;
		}
		var c = this.cached;
		if (!c[1] || (c[0] < c[1])) {
			ajax.ContentItems_getTestimonial([ContentItems.cached[2]], function(r){
				if (!r || !r['id'] || !r['name']) {
					return false;
				}
				with (ContentItems) {
					var i = cached[0]++;
					cached[1] = r['count'];
					cached[2] += ',' + r['id'];
					cached[3][i] = r;
					cached[4] = i;
					testimonialChange(r);
				}
			});
		} else {
			var i;
			do {
				i = Math.round(Math.random() * (c[3].length - 1));
			} while (i == c[4]);
			var r = c[3][i];
			this.cached[4] = i;
			this.testimonialChange(r);
		}
	},
	testimonialChange: function(r) {
		var t = $('#testimonials');
		var f = $('li:eq(0)', t);
		var c = $('<li><blockquote></blockquote><p class="who"></p></li>').attr({ className: 'testimonial-' + r['id'] }).hide().appendTo($('ul', t));
		$('blockquote', c).html('<span class="q q1">&#8220;</span>' + r['text'] + '<span class="q q2">&#8221;</span>');
		$('p.who', c).html(r['name'] + ' (' + r['link'] + ')');
//		ContentItems.quotes();
		if ($.browser.ie6)
		{
			f.remove();
			c.show();
		}
		else
		{
			var h2 = c.height();
			$('ul', t).animate({height: h2 + 10}, 400, function(){
				c.show();
				f.slideUp(700, function(){
					f.remove();
				});
			});
		}
//		window.setTimeout("ContentItems.testimonials();", 30000);
	},
*/	

	faq: function(){
		$('#faq').each(function(){
			$('> div', this).hide().filter(':eq(0)').show();
			$('ul.nav a:eq(0)', this).addClass('active');
		}).find('ul.nav a').click(function(){
			var id = $(this).attr('href').substr(1);
			$('#faq > div:visible').slideUp(300);
			$('#faq-' + id).slideDown(500);
			$('a', this.parentNode.parentNode).removeClass('active');
			$(this).addClass('active');
			return false;
		}).end().find('p.alR').hide();
	}
};

load.register(function(){
	ContentItems.init();
});

/* Projects.js */
var ClientsProjects = {
	init: function()
	{
		var doc = document;
		if (!$(doc.body).hasClass('clientLogin'))
		{
			this.loginBar();
		}
		if (/^#message-(\d+)$/.test(doc.location.hash))
		{
			$(doc.location.hash).addClass('active');
		}

		this.messages();
		this.projects();
	},
	loginBar: function()
	{
		var f = $('#loginBar form'), id = 'login2', name = 'login';
		if (!f.children().length) {
			var s = [
			'<ul>',
				'<li class="txt">View projects status in the Client Area &raquo;</li>',
				'<li><label for="' + id + '-username">Email</label> <input type="text" class="TextBox" name="' + name + '[username]" id="' + id + '-username"/></li>',
				'<li><label for="' + id + '-password">Password</label> <input type="password" class="TextBox" name="' + name + '[password]" id="' + id + '-password"/></li>',
				'<li class="login"><input type="hidden" name="' + name + '[url]" value="/client/projects/"/><input type="submit" value="Login"/></li>',
				'<li class="links reset"><a href="/client/password-reset/">Reset password</a></li>',
			'</ul>'
			];
			f.html(s.join(''));
			f.find('ul').hide().end();
		}

		$('#loginBar p.button a').click(function(){
			var bar = $('#loginBar'), ul = bar.find('ul'), complete = function(){
				bar.toggleClass('expanded');
			};
			if (ul.is(':visible'))
			{
				ul.slideUp(200, complete);
			}
			else
			{
				ul.slideDown(300, complete).find('input')[0].focus();
			}
			return false;
		});	
	},
	messages: function()
	{
		var ml = $('#content').find('.messagesList');
		ml.find('> .item > .content').each(function(){
			var self = $(this), h = self.height();
			if (h > 450)
			{
				self.height('30em');
				self.
					after('<p class="expand"><a href="#">see all text &raquo;</a></p>').
					parent().find('.expand a').click(function(){
						$(this).parent().hide().prev().height('auto');
						return false;
					});
			}
		});
		ml.each(function(){
			var self = $(this), items = self.children('.item');
			if (items.length > 10)
			{
				self.prepend('<p class="note note2">Previous message were hidden to make the project thread smaller. <a href="#">Show previous messages</a></p><div class="previous"></div>');
				var hidden = items.slice(0, items.length - 10),
					previous = self.children('.previous').hide().append(hidden.show());
				self.find('.note a').click(function(){
					self.find('.note').slideUp(400);
					previous.slideDown(2000);
					return false;
				});
			}
		});
		
		var uid = parseInt($('#user-name').data('userid'), 10) || 0;

		// check for previous message from user to use as template
		if ((uid > 0) && $('#content').find('.messagesList > .item.user-' + uid).length)
		{
			$('#messageNewForm').find('.but').append('<button id="messageNewForm-preview" class="Button">Preview</button>').end();
			$('#messageNewForm-preview').click(function(){
				var msg = $('#messageNewForm-message');
				ajax.ClientsMessages_previewMessage({ message: msg.val() }, function(d){
					ClientsProjects.preview(d.message);
					document.location = '#messagePreview';
				}, false);
				return false;
			});
		}

	},
	projects: function()
	{
		$('#projects, #offers').each(function(){
			var p = $(this), pr = p.find('tbody tr');
			if (pr.length <= 10)
				return;
			var h = pr.slice(10).each(function(){
				var t = $(this);
				if (!t.find('.cashed-0').length)
					t.hide();
			});
			p.after('<p class="note note2">Older projects were hidden for better usability. <a href="#">Show older projects</a></p>');
			p.next().find('a').click(function(){
				h.show();
				$(this).parent().remove();
				return false;
			});
		});
	},
	preview: function(m)
	{
//		console.log(m);
		var uid = $('#user-name').data('userid'),
			msg = $('#content').find('.messagesList > .item.user-' + uid).first().clone().attr('id', '').removeClass('active'),
			list = $('#messagePreview');
		if (!list.length)
			list = $('<div id="messagePreview" class="simpleIterator messagesList"><h3>Preview Message</h3></div>').prependTo('#messageNew');
		msg.find('.date').html('<span class="label">Date:</span> now');
		msg.find('.content').html(m);
		msg.find('.attachment').remove();
		list.children('.item').remove().end().append(msg);
	}
};

load.register(function(){ClientsProjects.init();});
/* Iterator.js */
function iteratorInit()
{
	var odd = $('.tableIterator tbody tr:nth-child(odd)').addClass('odd');
	var even = $('.tableIterator tbody tr:nth-child(even)').addClass('even');
/*
	var filter = $('table.tableIterator thead tr.filter').
		find("input[@type='text'],select").
		bind('blur', function() { this.form.submit(); }).
		bind('change', function() { this.form.submit(); });
*/
}
load.register(iteratorInit);

/* Orders.js */
var ShopOrders = {
	prices: {},
	price: {
		'type': 1,
		'cms': 'none',
		'options': {}
	},
	initForm: function() {
		var self = this;

		$('.menuTop').append('<p id="newProject"><a href="/#new">New Project</a></p>');

		$('#orderFrm .f-3').append('<p id="orderPrice"></p>');

		$('#orderFrm-type').change(function(){
			self.price['type'] = this.selectedIndex + 1;
			self.updatePrice();
		}).trigger('change');

		$('#orderFrm-cms-0,#orderFrm-cms-1,#orderFrm-cms-2').bind('change', function(){
			self.price['cms'] = this.value;
			self.updatePrice();
		});

		$('#orderForm .Check input').bind('click', function(){
			var v = this.value;

			if (!this.checked)
				delete self.price['options'][v];
			else
				self.price['options'][v] = true;

			self.updatePrice();
		}).each(function(){
			if (self.prices[this.value])
			{
				var l = $('label[for="' + this.id + '"]');
				l.html(l.html() + ' (+$' + self.prices[this.value] + '/page)');
			}
		});

		$('#orderForm .bots').parents('li').hide(); //.css({ padding: '0', height: '0', overflow: 'hidden' });

		$('#orderWrap').append('<p id="toggleForm"><a href="#" class="ir expand"><em></em>Expand / Collapse</a></p>');
		$('#orderWrap').after('<div id="orderWrapBox" class="hide"></div>');

		$('#toggleForm a, #newProject a').click(function(){
			var a = $('#toggleForm a'), wrap = $('#orderWrap'), box = $('#orderWrapBox'), main = $('#main'), form = $('#orderForm');
			if (a.hasClass('expand'))
			{
				box.height(wrap.outerHeight()).show();
				if ($.support.opacity)
				{
					main.fadeOut(400);
					wrap.addClass('orderWrapAbs').animate({ width: '920px' }, 500, function(){
						$('#orderWrap').addClass('orderWrapExp');
						$('#orderForm input[type="text"]')[0].focus();
					});
					a.removeClass('expand').addClass('minimize')[0].blur();
				}
				else
				{
					main.hide();
					wrap.addClass('orderWrapAbs').css({ width: '920px' });
					$('#orderWrap').addClass('orderWrapExp');
					$('#orderForm input[type="text"]')[0].focus();
					a.removeClass('expand').addClass('minimize')[0].blur();
				}
			}
			else
			{
				if ($.support.opacity)
				{
					main.fadeIn(400);
					wrap.removeClass('orderWrapExp').animate({ width: '350px' }, 500, function(){
						box.hide();
						$('#orderWrap').removeClass('orderWrapAbs');
						$('#orderForm input[type="text"]')[0].focus();
					});
					a.removeClass('minimize').addClass('expand')[0].blur();
				}
				else
				{
					main.show();
					wrap.removeClass('orderWrapExp').css({ width: '350px' });
					box.hide();
					$('#orderWrap').removeClass('orderWrapAbs');
					$('#orderForm input[type="text"]')[0].focus();
					a.removeClass('minimize').addClass('expand')[0].blur();
				}
			}
			return false;
		});

		$('#orderForm .toggleOptions').wrapInner('<a href="#"></a>').find('a').click(function(){
			var self = $(this);
			self.toggleClass('active');
			self.parents('fieldset').toggleClass('visible');
			return false;
		}).end().parent().addClass('optionals');

		if (document.location.hash == '#new')
		{
			$('#newProject a').click();
		}
	},
	updatePrice: function()
	{
		var p = 0, pp = this.price, prices = this.prices;

		if (typeof(prices['p' + pp['type']]) == 'undefined')
		{
			$('#orderPrice').html('');
			return false;
		}
		p += prices['p' + pp['type']];

		if (pp['cms'] != 'none')
		{
			p += prices[pp['cms']];
		}

		for (var o in pp['options'])
		{
			if (prices[o])
				p += prices[o] * pp['type'];
		}

		p = p.toLocaleString();

		$('#orderPrice').html('<label>Project Price:</label> <strong>' + p + ' ' + prices['c'] + '</strong>');
	}
};
load.register(function(){ ShopOrders.initForm(); });
/* Layout.js */
var CoreLayout = 
{
	init: function()
	{
		$('#footer').append('<p class="top"><a href="#header">Back to top</a></p>');	

		CoreLayout.holiday();
	},
	holiday: function()
	{
		if (!Config.holiday)
			return;

		$('#orderForm').prepend('<p class="break">Our team is currently on a break!<br/>Returning on ' + Config.holiday + '</p>');

		var message = 'Our team is currently on a short break! We\'re returning on ' + Config.holiday;

		if ($('#content .FormsForm').length)
		{
			$('#content').prepend('<p class="note note2">' + message + '</p>');
		}
		if ($(document.body).hasClass('clientArea'))
		{
			$('#main').prepend('<p class="note note2">' + message + '</p>');
		}
	}
};
load.register(CoreLayout.init);

/* fileupload.js */
/*
 * jQuery File Upload Plugin 3.8.1
 * https://github.com/blueimp/jQuery-File-Upload
 *
 * Copyright 2010, Sebastian Tschan
 * https://blueimp.net
 *
 * Licensed under the MIT license:
 * http://creativecommons.org/licenses/MIT/
 */

/*jslint browser: true */
/*global File, FileReader, FormData, unescape, jQuery */

(function($) {

    var defaultNamespace = 'file_upload',
        undef = 'undefined',
        func = 'function',
        num = 'number',
        FileUpload,
        methods,

        MultiLoader = function(callBack, numberComplete) {
            var loaded = 0;
            this.complete = function(){
                loaded += 1;
                if (loaded === numberComplete) {
                    callBack();
                }
            };
        };
        
    FileUpload = function(container) {
        var fileUpload = this,
            uploadForm,
            fileInput,
            settings = {
                namespace: defaultNamespace,
                uploadFormFilter: function(index) {
                    return true;
                },
                fileInputFilter: function(index) {
                    return true;
                },
                cssClass: defaultNamespace,
                dragDropSupport: true,
                dropZone: container,
                url: function(form) {
                    return form.attr('action');
                },
                method: function(form) {
                    return form.attr('method');
                },
                fieldName: function(input) {
                    return input.attr('name');
                },
                formData: function(form) {
                    return form.serializeArray();
                },
                multipart: true,
                multiFileRequest: false,
                withCredentials: false,
                forceIframeUpload: false
            },
            documentListeners = {},
            dropZoneListeners = {},
            protocolRegExp = /^http(s)?:\/\//,
            optionsReference,

            isXHRUploadCapable = function(){
                return typeof XMLHttpRequest !== undef && typeof File !== undef && (
                    !settings.multipart || typeof FormData !== undef || typeof FileReader !== undef
                );
            },

            initEventHandlers = function(){
                if (settings.dragDropSupport) {
                    if (typeof settings.onDocumentDragEnter === func) {
                        documentListeners['dragenter.' + settings.namespace] = function(e){
                            settings.onDocumentDragEnter(e);
                        };
                    }
                    if (typeof settings.onDocumentDragLeave === func) {
                        documentListeners['dragleave.' + settings.namespace] = function(e){
                            settings.onDocumentDragLeave(e);
                        };
                    }
                    documentListeners['dragover.'   + settings.namespace] = fileUpload.onDocumentDragOver;
                    documentListeners['drop.'       + settings.namespace] = fileUpload.onDocumentDrop;
                    $(document).bind(documentListeners);
                    if (typeof settings.onDragEnter === func) {
                        dropZoneListeners['dragenter.' + settings.namespace] = function(e){
                            settings.onDragEnter(e);
                        };
                    }
                    if (typeof settings.onDragLeave === func) {
                        dropZoneListeners['dragleave.' + settings.namespace] = function(e){
                            settings.onDragLeave(e);
                        };
                    }
                    dropZoneListeners['dragover.'   + settings.namespace] = fileUpload.onDragOver;
                    dropZoneListeners['drop.'       + settings.namespace] = fileUpload.onDrop;
                    settings.dropZone.bind(dropZoneListeners);
                }
                fileInput.bind('change.' + settings.namespace, fileUpload.onChange);
            },

            removeEventHandlers = function(){
                $.each(documentListeners, function(key, value) {
                    $(document).unbind(key, value);
                });
                $.each(dropZoneListeners, function(key, value) {
                    settings.dropZone.unbind(key, value);
                });
                fileInput.unbind('change.' + settings.namespace);
            },

            initUploadEventHandlers = function(files, index, xhr, settings) {
                if (typeof settings.onProgress === func) {
                    xhr.upload.onprogress = function(e){
                        settings.onProgress(e, files, index, xhr, settings);
                    };
                }
                if (typeof settings.onLoad === func) {
                    xhr.onload = function(e){
                        settings.onLoad(e, files, index, xhr, settings);
                    };
                }
                if (typeof settings.onAbort === func) {
                    xhr.onabort = function(e){
                        settings.onAbort(e, files, index, xhr, settings);
                    };
                }
                if (typeof settings.onError === func) {
                    xhr.onerror = function(e){
                        settings.onError(e, files, index, xhr, settings);
                    };
                }
            },

            getUrl = function(settings) {
                if (typeof settings.url === func) {
                    return settings.url(settings.uploadForm || uploadForm);
                }
                return settings.url;
            },
            
            getMethod = function(settings) {
                if (typeof settings.method === func) {
                    return settings.method(settings.uploadForm || uploadForm);
                }
                return settings.method;
            },
            
            getFieldName = function(settings) {
                if (typeof settings.fieldName === func) {
                    return settings.fieldName(settings.fileInput || fileInput);
                }
                return settings.fieldName;
            },

            getFormData = function(settings) {
                var formData;
                if (typeof settings.formData === func) {
                    return settings.formData(settings.uploadForm || uploadForm);
                } else if ($.isArray(settings.formData)) {
                    return settings.formData;
                } else if (settings.formData) {
                    formData = [];
                    $.each(settings.formData, function(name, value) {
                        formData.push({name: name, value: value});
                    });
                    return formData;
                }
                return [];
            },

            isSameDomain = function(url) {
                if (protocolRegExp.test(url)) {
                    var host = location.host,
                        indexStart = location.protocol.length + 2,
                        index = url.indexOf(host, indexStart),
                        pathIndex = index + host.length;
                    if ((index === indexStart || index === url.indexOf('@', indexStart) + 1) &&
                            (url.length === pathIndex || $.inArray(url.charAt(pathIndex), ['/', '?', '#']) !== -1)) {
                        return true;
                    }
                    return false;
                }
                return true;
            },

            setRequestHeaders = function(xhr, settings, sameDomain) {
                if (sameDomain) {
                    xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
                } else if (settings.withCredentials) {
                    xhr.withCredentials = true;
                }
                if ($.isArray(settings.requestHeaders)) {
                    $.each(settings.requestHeaders, function(index, header) {
                        xhr.setRequestHeader(header[0], header[1]);
                    });
                } else if (settings.requestHeaders) {
                    $.each(settings.requestHeaders, function(name, value) {
                        xhr.setRequestHeader(name, value);
                    });
                }
            },

            nonMultipartUpload = function(file, xhr, sameDomain) {
                if (sameDomain) {
                    xhr.setRequestHeader('X-File-Name', unescape(encodeURIComponent(file.name)));
                }
                xhr.setRequestHeader('Content-Type', file.type);
                xhr.send(file);
            },

            formDataUpload = function(files, xhr, settings) {
                var formData = new FormData(),
                    i;
                $.each(getFormData(settings), function(index, field) {
                    formData.append(field.name, field.value);
                });
                for (i = 0; i < files.length; i += 1) {
                    formData.append(getFieldName(settings), files[i]);
                }
                xhr.send(formData);
            },

            loadFileContent = function(file, callBack) {
                var fileReader = new FileReader();
                fileReader.onload = function(e){
                    file.content = e.target.result;
                    callBack();
                };
                fileReader.readAsBinaryString(file);
            },

            buildMultiPartFormData = function(boundary, files, filesFieldName, fields) {
                var doubleDash = '--',
                    crlf     = '\r\n',
                    formData = '';
                $.each(fields, function(index, field) {
                    formData += doubleDash + boundary + crlf +
                        'Content-Disposition: form-data; name="' +
                        unescape(encodeURIComponent(field.name)) +
                        '"' + crlf + crlf +
                        unescape(encodeURIComponent(field.value)) + crlf;
                });
                $.each(files, function(index, file) {
                    formData += doubleDash + boundary + crlf +
                        'Content-Disposition: form-data; name="' +
                        unescape(encodeURIComponent(filesFieldName)) +
                        '"; filename="' + unescape(encodeURIComponent(file.name)) + '"' + crlf +
                        'Content-Type: ' + file.type + crlf + crlf +
                        file.content + crlf;
                });
                formData += doubleDash + boundary + doubleDash + crlf;
                return formData;
            },
            
            fileReaderUpload = function(files, xhr, settings) {
                var boundary = '----MultiPartFormBoundary' + (new Date()).getTime(),
                    loader,
                    i;
                xhr.setRequestHeader('Content-Type', 'multipart/form-data; boundary=' + boundary);
                loader = new MultiLoader(function(){
                    xhr.sendAsBinary(buildMultiPartFormData(
                        boundary,
                        files,
                        getFieldName(settings),
                        getFormData(settings)
                    ));
                }, files.length);
                for (i = 0; i < files.length; i += 1) {
                    loadFileContent(files[i], loader.complete);
                }
            },

            upload = function(files, index, xhr, settings) {
                var url = getUrl(settings),
                    sameDomain = isSameDomain(url),
                    filesToUpload;
                initUploadEventHandlers(files, index, xhr, settings);
                xhr.open(getMethod(settings), url, true);
                setRequestHeaders(xhr, settings, sameDomain);
                if (!settings.multipart) {
                    nonMultipartUpload(files[index], xhr, sameDomain);
                } else {
                    if (typeof index === num) {
                        filesToUpload = [files[index]];
                    } else {
                        filesToUpload = files;
                    }
                    if (typeof FormData !== undef) {
                        formDataUpload(filesToUpload, xhr, settings);
                    } else if (typeof FileReader !== undef) {
                        fileReaderUpload(filesToUpload, xhr, settings);
                    } else {
                        $.error('Browser does neither support FormData nor FileReader interface');
                    }
                }
            },

            handleUpload = function(event, files, input, form, index) {
                var xhr = new XMLHttpRequest(),
                    uploadSettings = $.extend({}, settings);
                uploadSettings.fileInput = input;
                uploadSettings.uploadForm = form;
                if (typeof uploadSettings.initUpload === func) {
                    uploadSettings.initUpload(
                        event,
                        files,
                        index,
                        xhr,
                        uploadSettings,
                        function(){
                            upload(files, index, xhr, uploadSettings);
                        }
                    );
                } else {
                    upload(files, index, xhr, uploadSettings);
                }
            },

            handleFiles = function(event, files, input, form) {
                var i;
                if (settings.multiFileRequest) {
                    handleUpload(event, files, input, form);
                } else {
                    for (i = 0; i < files.length; i += 1) {
                        handleUpload(event, files, input, form, i);
                    }
                }
            },

            legacyUploadFormDataInit = function(input, form, settings) {
                var formData = getFormData(settings);
                form.find(':input').not(':disabled')
                    .attr('disabled', true)
                    .addClass(settings.namespace + '_disabled');
                $.each(formData, function(index, field) {
                    $('<input type="hidden"/>')
                        .attr('name', field.name)
                        .val(field.value)
                        .addClass(settings.namespace + '_form_data')
                        .appendTo(form);
                });
                input
                    .attr('name', getFieldName(settings))
                    .appendTo(form);
            },

            legacyUploadFormDataReset = function(input, form, settings) {
                input.detach();
                form.find('.' + settings.namespace + '_disabled')
                    .removeAttr('disabled')
                    .removeClass(settings.namespace + '_disabled');
                form.find('.' + settings.namespace + '_form_data').remove();
            },

            legacyUpload = function(input, form, iframe, settings) {
                var originalAction = form.attr('action'),
                    originalMethod = form.attr('method'),
                    originalTarget = form.attr('target');
                iframe
                    .unbind('abort')
                    .bind('abort', function(e){
                        iframe.readyState = 0;
                        // javascript:false as iframe src prevents warning popups on HTTPS in IE6
                        // concat is used here to prevent the "Script URL" JSLint error:
                        iframe.unbind('load').attr('src', 'javascript'.concat(':false;'));
                        if (typeof settings.onAbort === func) {
                            settings.onAbort(e, [{name: input.val(), type: null, size: null}], 0, iframe, settings);
                        }
                    })
                    .unbind('load')
                    .bind('load', function(e){
                        iframe.readyState = 4;
                        if (typeof settings.onLoad === func) {
                            settings.onLoad(e, [{name: input.val(), type: null, size: null}], 0, iframe, settings);
                        }
                        // Fix for IE endless progress bar activity bug (happens on form submits to iframe targets):
                        $('<iframe src="javascript:false;" style="display:none"></iframe>').appendTo(form).remove();
                    });
                form
                    .attr('action', getUrl(settings))
                    .attr('method', getMethod(settings))
                    .attr('target', iframe.attr('name'));
                legacyUploadFormDataInit(input, form, settings);
                iframe.readyState = 2;
                form.get(0).submit();
                legacyUploadFormDataReset(input, form, settings);
                form
                    .attr('action', originalAction)
                    .attr('method', originalMethod)
                    .attr('target', originalTarget);
            },

            handleLegacyUpload = function(event, input, form) {
                // javascript:false as iframe src prevents warning popups on HTTPS in IE6:
                var iframe = $('<iframe src="javascript:false;" style="display:none" name="iframe_' +
                    settings.namespace + '_' + (new Date()).getTime() + '"></iframe>'),
                    uploadSettings = $.extend({}, settings);
                uploadSettings.fileInput = input;
                uploadSettings.uploadForm = form;
                iframe.readyState = 0;
                iframe.abort = function(){
                    iframe.trigger('abort');
                };
                iframe.bind('load', function(){
                    iframe.unbind('load');
                    if (typeof uploadSettings.initUpload === func) {
                        uploadSettings.initUpload(
                            event,
                            [{name: input.val(), type: null, size: null}],
                            0,
                            iframe,
                            uploadSettings,
                            function(){
                                legacyUpload(input, form, iframe, uploadSettings);
                            }
                        );
                    } else {
                        legacyUpload(input, form, iframe, uploadSettings);
                    }
                }).appendTo(form);
            },
            
            initUploadForm = function(){
                uploadForm = (container.is('form') ? container : container.find('form')).filter(settings.uploadFormFilter);
            },
            
            initFileInput = function(){
                fileInput = uploadForm.find('input:file').filter(settings.fileInputFilter);
            },
            
            replaceFileInput = function(input) {
                var inputClone = input.clone(true);
                $('<form/>').append(inputClone).get(0).reset();
                input.after(inputClone).detach();
                initFileInput();
            };

        this.onDocumentDragOver = function(e){
            if (typeof settings.onDocumentDragOver === func && settings.onDocumentDragOver(e) === false) {
                return false;
            }
            e.preventDefault();
        };
        
        this.onDocumentDrop = function(e){
            if (typeof settings.onDocumentDrop === func && settings.onDocumentDrop(e) === false) {
                return false;
            }
            e.preventDefault();
        };

        this.onDragOver = function(e){
            if (typeof settings.onDragOver === func && settings.onDragOver(e) === false) {
                return false;
            }
            var dataTransfer = e.originalEvent.dataTransfer;
            if (dataTransfer && dataTransfer.files) {
                dataTransfer.dropEffect = dataTransfer.effectAllowed = 'copy';
                e.preventDefault();
            }
        };

        this.onDrop = function(e){
            if (typeof settings.onDrop === func && settings.onDrop(e) === false) {
                return false;
            }
            var dataTransfer = e.originalEvent.dataTransfer;
            if (dataTransfer && dataTransfer.files && isXHRUploadCapable()) {
                handleFiles(e, dataTransfer.files);
            }
            e.preventDefault();
        };
        
        this.onChange = function(e){
            if (typeof settings.onChange === func && settings.onChange(e) === false) {
                return false;
            }
            var input = $(e.target),
                form = $(e.target.form);
            if (form.length === 1) {
                input.data(defaultNamespace + '_form', form);
                replaceFileInput(input);
            } else {
                form = input.data(defaultNamespace + '_form');
            }
            if (!settings.forceIframeUpload && e.target.files && isXHRUploadCapable()) {
                handleFiles(e, e.target.files, input, form);
            } else {
                handleLegacyUpload(e, input, form);
            }
        };

        this.init = function(options) {
            if (options) {
                $.extend(settings, options);
                optionsReference = options;
            }
            initUploadForm();
            initFileInput();
            if (container.data(settings.namespace)) {
                $.error('FileUpload with namespace "' + settings.namespace + '" already assigned to this element');
                return;
            }
            container
                .data(settings.namespace, fileUpload)
                .addClass(settings.cssClass);
            settings.dropZone.not(container).addClass(settings.cssClass);
            initEventHandlers();
        };

        this.options = function(options) {
            var oldCssClass,
                oldDropZone,
                uploadFormFilterUpdate,
                fileInputFilterUpdate;
            if (typeof options === undef) {
                return $.extend({}, settings);
            }
            if (optionsReference) {
                $.extend(optionsReference, options);
            }
            removeEventHandlers();
            $.each(options, function(name, value) {
                switch (name) {
                case 'namespace':
                    $.error('The FileUpload namespace cannot be updated.');
                    return;
                case 'uploadFormFilter':
                    uploadFormFilterUpdate = true;
                    fileInputFilterUpdate = true;
                    break;
                case 'fileInputFilter':
                    fileInputFilterUpdate = true;
                    break;
                case 'cssClass':
                    oldCssClass = settings.cssClass;
                    break;
                case 'dropZone':
                    oldDropZone = settings.dropZone;
                    break;
                }
                settings[name] = value;
            });
            if (uploadFormFilterUpdate) {
                initUploadForm();
            }
            if (fileInputFilterUpdate) {
                initFileInput();
            }
            if (typeof oldCssClass !== undef) {
                container
                    .removeClass(oldCssClass)
                    .addClass(settings.cssClass);
                (oldDropZone ? oldDropZone : settings.dropZone).not(container)
                    .removeClass(oldCssClass);
                settings.dropZone.not(container).addClass(settings.cssClass);
            } else if (oldDropZone) {
                oldDropZone.not(container).removeClass(settings.cssClass);
                settings.dropZone.not(container).addClass(settings.cssClass);
            }
            initEventHandlers();
        };
        
        this.option = function(name, value) {
            var options;
            if (typeof value === undef) {
                return settings[name];
            }
            options = {};
            options[name] = value;
            fileUpload.options(options);
        };
        
        this.destroy = function(){
            removeEventHandlers();
            container
                .removeData(settings.namespace)
                .removeClass(settings.cssClass);
            settings.dropZone.not(container).removeClass(settings.cssClass);
        };
    };

    methods = {
        init: function(options) {
            return this.each(function(){
                (new FileUpload($(this))).init(options);
            });
        },
        
        option: function(option, value, namespace) {
            namespace = namespace ? namespace : defaultNamespace;
            var fileUpload = $(this).data(namespace);
            if (fileUpload) {
                if (typeof option === 'string') {
                    return fileUpload.option(option, value);
                }
                return fileUpload.options(option);
            } else {
                $.error('No FileUpload with namespace "' + namespace + '" assigned to this element');
            }
        },
                
        destroy: function(namespace) {
            namespace = namespace ? namespace : defaultNamespace;
            return this.each(function(){
                var fileUpload = $(this).data(namespace);
                if (fileUpload) {
                    fileUpload.destroy();
                } else {
                    $.error('No FileUpload with namespace "' + namespace + '" assigned to this element');
                }
            });
        }
    };
    
    $.fn.fileUpload = function(method) {
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error('Method ' + method + ' does not exist on jQuery.fileUpload');
        }
    };
    
}(jQuery));
/* fileupload.js */

var FileUploadAPI = function(){

	$('#orderFrm, #messageNewForm, #FormsForm0').has('input:file').each(function(){
		var form = $(this),
			input = form.find('input:file').eq(0).wrap('<div class="file-upload"></div>'),
			wrap = input.parent().append('<div class="Button">Choose File</div>'),
			hidden = wrap.prev('input[type="hidden"]'),
			button = wrap.children('.button'),
			parent = wrap.parent().append('<div class="dropZone">drag &amp; drop file here</div><div class="filename">No file selected</div><div class="progressText hide">Upload progress: <span></span></div><div class="progressBar hide"><div class="progress"></div></div>'),
			dropZone = parent.children('.dropZone'),
			filename = parent.children('.filename'),
			progressText = parent.children('.progressText'),
			progressBar = parent.children('.progressBar'),

			tempFileName = (new Date()).getTime() + '-' + Math.floor(Math.random()*1000000), 
			uploading = false, uploaded = 0,
			tDrag1 = null, tDrag2 = null,

			params = {
				url: '/fileupload/?filename=' + tempFileName,
				dropZone: dropZone,
				formData: [],
				initUpload: function(ev, files, i, xhr, h, cb){
					var f = files[i], p = f.name.split('\\'), file = p[p.length - 1];
//					console.log('initUpload', f.name, f.size, p, file);
					if (f.size > 52428800) {
						alert('File size too large! Try uploading a file under 50Mb.');
						return;
					}

					wrap.add(dropZone).hide();
					progressBar.add(progressText).show().children('.progress').removeClass('simple').width(0);
					if (!dragEnabled)
					{
						progressBar.children().addClass('simple').width('100%');
						progressText.children('span').html('Uploading...');
					}
					filename.html(file);
					hidden[0].value += '|' + file;
					uploading = true;
					cb();
				},
				onProgress: function(ev, files, i, xhr, h){
					var f = files[i];
//					console.log('progress', f.name, f.size, ev.loaded);
					if (ev.lengthComputable)
					{
						var percent = Math.round(ev.loaded / ev.total * 100)
//						console.log(percent + '%');
						progressText.children('span').html(percent + '%');
						progressBar.children().width(percent + '%');
					}
				},
				onLoad: function(ev, files, i, xhr, h){
					var f = files[i];
//					console.log('load', f.name, f.size);
					progressText.children('span').html('Finished');
					progressBar.children().removeClass('simple').width('100%');
					uploading = false;
					uploaded++;
				},
				onError: function(){
					alert('There was an error with the upload! Please let us know about this error using our contact form.');
				}
			},
			paramsDrag = {
				onDocumentDragEnter: function(e){
//					console.log('onDocumentDragEnter');
					dropZone.addClass('dropZone-visible');
				},
				onDocumentDragOver: function(e){
					if (tDrag1) clearTimeout(tDrag1);
					tDrag1 = setTimeout(function(){
						dropZone.removeClass('dropZone-visible');
					}, 200);
				},
				onDragEnter: function(e){
//					console.log('onDragEnter', e, dropZone[0].className);
					dropZone.addClass('dropZone-active');
				},
				onDragOver: function(e){
//					console.log('onDragOver', e, tDrag2, dropZone[0].className);
					if (tDrag2) clearTimeout(tDrag2);
					tDrag2 = setTimeout(function(){
						dropZone.removeClass('dropZone-active');
					}, 200);
				},
/*
				onDragLeave: function(e){
					console.log('onDragLeave', e);
				},
*/
				onDrop: function(e){
//					console.log('onDrop', e);
					dropZone.removeClass('dropZone-active');
				}
			},
			ua = navigator.userAgent,
			dragEnabled = !($.browser.msie || $.browser.opera || ($.browser.webkit && !/Chrome\//.test(ua) && /Windows/.test(ua)));

//		alert(ua + ' ' + dragEnabled);

		if (dragEnabled)
		{
			params = $.extend(params, paramsDrag);
		}
		else
		{
			dropZone.addClass('dropZone-disabled');
		}

//		console.log(params);

		form.fileUpload(params);

		form.bind('submit', function(){
			if (form[0].id == 'orderFrm')
			{
				if ((uploaded == 0) && !$('#orderFrm-url').val()) {
					alert('You have to upload at least one file or set an alternative download URL!');
					return false;
				}
			}
			if (uploading) {
				alert('Please wait for the upload to finish!');
			}
			return !uploading;
		});

		hidden.val(tempFileName);

	});

};

$(FileUploadAPI);

/* ShopPrices1-9a44a5eea9e6aec5422e4d46d9141590 */
ShopOrders.prices={"c":"USD","p1":155,"p2":245,"p3":330,"p4":410,"p5":485,"p6":560,"p7":630,"p8":700,"p9":765,"p10":830,"p11":890,"p12":950,"p13":1010,"p14":1065,"p15":1120,"wp":200,"mobile":15,"email":15,"ie7":25,"ie6":50};

