/*
 * jQuery UI 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI
 */
jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
 * jQuery UI Draggable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Draggables
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs}}}));a.extend(a.ui.draggable,{version:"1.7.2",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(b,c){var e=a(this).data("draggable").options;var d=a.makeArray(a(e.stack.group)).sort(function(g,f){return(parseInt(a(g).css("zIndex"),10)||e.stack.min)-(parseInt(a(f).css("zIndex"),10)||e.stack.min)});a(d).each(function(f){this.style.zIndex=e.stack.min+f});this[0].style.zIndex=e.stack.min+d.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
 * jQuery UI Sortable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Sortables
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.sortable",a.extend({},a.ui.mouse,{_init:function(){var b=this.options;this.containerCache={};this.element.addClass("ui-sortable");this.refresh();this.floating=this.items.length?(/left|right/).test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var b=this.items.length-1;b>=0;b--){this.items[b].item.removeData("sortable-item")}},_mouseCapture:function(e,f){if(this.reverting){return false}if(this.options.disabled||this.options.type=="static"){return false}this._refreshItems(e);var d=null,c=this,b=a(e.target).parents().each(function(){if(a.data(this,"sortable-item")==c){d=a(this);return false}});if(a.data(e.target,"sortable-item")==c){d=a(e.target)}if(!d){return false}if(this.options.handle&&!f){var g=false;a(this.options.handle,d).find("*").andSelf().each(function(){if(this==e.target){g=true}});if(!g){return false}}this.currentItem=d;this._removeCurrentsFromItems();return true},_mouseStart:function(e,f,b){var g=this.options,c=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(e);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");a.extend(this.offset,{click:{left:e.pageX-this.offset.left,top:e.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(e);this.originalPageX=e.pageX;this.originalPageY=e.pageY;if(g.cursorAt){this._adjustOffsetFromHelper(g.cursorAt)}this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};if(this.helper[0]!=this.currentItem[0]){this.currentItem.hide()}this._createPlaceholder();if(g.containment){this._setContainment()}if(g.cursor){if(a("body").css("cursor")){this._storedCursor=a("body").css("cursor")}a("body").css("cursor",g.cursor)}if(g.opacity){if(this.helper.css("opacity")){this._storedOpacity=this.helper.css("opacity")}this.helper.css("opacity",g.opacity)}if(g.zIndex){if(this.helper.css("zIndex")){this._storedZIndex=this.helper.css("zIndex")}this.helper.css("zIndex",g.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){this.overflowOffset=this.scrollParent.offset()}this._trigger("start",e,this._uiHash());if(!this._preserveHelperProportions){this._cacheHelperProportions()}if(!b){for(var d=this.containers.length-1;d>=0;d--){this.containers[d]._trigger("activate",e,c._uiHash(this))}}if(a.ui.ddmanager){a.ui.ddmanager.current=this}if(a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,e)}this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(e);return true},_mouseDrag:function(f){this.position=this._generatePosition(f);this.positionAbs=this._convertPositionTo("absolute");if(!this.lastPositionAbs){this.lastPositionAbs=this.positionAbs}if(this.options.scroll){var g=this.options,b=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if((this.overflowOffset.top+this.scrollParent[0].offsetHeight)-f.pageY<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop+g.scrollSpeed}else{if(f.pageY-this.overflowOffset.top<g.scrollSensitivity){this.scrollParent[0].scrollTop=b=this.scrollParent[0].scrollTop-g.scrollSpeed}}if((this.overflowOffset.left+this.scrollParent[0].offsetWidth)-f.pageX<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft+g.scrollSpeed}else{if(f.pageX-this.overflowOffset.left<g.scrollSensitivity){this.scrollParent[0].scrollLeft=b=this.scrollParent[0].scrollLeft-g.scrollSpeed}}}else{if(f.pageY-a(document).scrollTop()<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-g.scrollSpeed)}else{if(a(window).height()-(f.pageY-a(document).scrollTop())<g.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+g.scrollSpeed)}}if(f.pageX-a(document).scrollLeft()<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-g.scrollSpeed)}else{if(a(window).width()-(f.pageX-a(document).scrollLeft())<g.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+g.scrollSpeed)}}}if(b!==false&&a.ui.ddmanager&&!g.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,f)}}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d],c=e.item[0],h=this._intersectsWithPointer(e);if(!h){continue}if(c!=this.currentItem[0]&&this.placeholder[h==1?"next":"prev"]()[0]!=c&&!a.ui.contains(this.placeholder[0],c)&&(this.options.type=="semi-dynamic"?!a.ui.contains(this.element[0],c):true)){this.direction=h==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(e)){this._rearrange(f,e)}else{break}this._trigger("change",f,this._uiHash());break}}this._contactContainers(f);if(a.ui.ddmanager){a.ui.ddmanager.drag(this,f)}this._trigger("sort",f,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(c,d){if(!c){return}if(a.ui.ddmanager&&!this.options.dropBehaviour){a.ui.ddmanager.drop(this,c)}if(this.options.revert){var b=this;var e=b.placeholder.offset();b.reverting=true;a(this.helper).animate({left:e.left-this.offset.parent.left-b.margins.left+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollLeft),top:e.top-this.offset.parent.top-b.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){b._clear(c)})}else{this._clear(c,d)}return false},cancel:function(){var b=this;if(this.dragging){this._mouseUp();if(this.options.helper=="original"){this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}for(var c=this.containers.length-1;c>=0;c--){this.containers[c]._trigger("deactivate",null,b._uiHash(this));if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",null,b._uiHash(this));this.containers[c].containerCache.over=0}}}if(this.placeholder[0].parentNode){this.placeholder[0].parentNode.removeChild(this.placeholder[0])}if(this.options.helper!="original"&&this.helper&&this.helper[0].parentNode){this.helper.remove()}a.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});if(this.domPosition.prev){a(this.domPosition.prev).after(this.currentItem)}else{a(this.domPosition.parent).prepend(this.currentItem)}return true},serialize:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};a(b).each(function(){var e=(a(d.item||this).attr(d.attribute||"id")||"").match(d.expression||(/(.+)[-=_](.+)/));if(e){c.push((d.key||e[1]+"[]")+"="+(d.key&&d.expression?e[1]:e[2]))}});return c.join("&")},toArray:function(d){var b=this._getItemsAsjQuery(d&&d.connected);var c=[];d=d||{};b.each(function(){c.push(a(d.item||this).attr(d.attribute||"id")||"")});return c},_intersectsWith:function(m){var e=this.positionAbs.left,d=e+this.helperProportions.width,k=this.positionAbs.top,j=k+this.helperProportions.height;var f=m.left,c=f+m.width,n=m.top,i=n+m.height;var o=this.offset.click.top,h=this.offset.click.left;var g=(k+o)>n&&(k+o)<i&&(e+h)>f&&(e+h)<c;if(this.options.tolerance=="pointer"||this.options.forcePointerForContainers||(this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>m[this.floating?"width":"height"])){return g}else{return(f<e+(this.helperProportions.width/2)&&d-(this.helperProportions.width/2)<c&&n<k+(this.helperProportions.height/2)&&j-(this.helperProportions.height/2)<i)}},_intersectsWithPointer:function(d){var e=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,d.top,d.height),c=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,d.left,d.width),g=e&&c,b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(!g){return false}return this.floating?(((f&&f=="right")||b=="down")?2:1):(b&&(b=="down"?2:1))},_intersectsWithSides:function(e){var c=a.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,e.top+(e.height/2),e.height),d=a.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,e.left+(e.width/2),e.width),b=this._getDragVerticalDirection(),f=this._getDragHorizontalDirection();if(this.floating&&f){return((f=="right"&&d)||(f=="left"&&!d))}else{return b&&((b=="down"&&c)||(b=="up"&&!c))}},_getDragVerticalDirection:function(){var b=this.positionAbs.top-this.lastPositionAbs.top;return b!=0&&(b>0?"down":"up")},_getDragHorizontalDirection:function(){var b=this.positionAbs.left-this.lastPositionAbs.left;return b!=0&&(b>0?"right":"left")},refresh:function(b){this._refreshItems(b);this.refreshPositions()},_connectWith:function(){var b=this.options;return b.connectWith.constructor==String?[b.connectWith]:b.connectWith},_getItemsAsjQuery:function(b){var l=this;var g=[];var e=[];var h=this._connectWith();if(h&&b){for(var d=h.length-1;d>=0;d--){var k=a(h[d]);for(var c=k.length-1;c>=0;c--){var f=a.data(k[c],"sortable");if(f&&f!=this&&!f.options.disabled){e.push([a.isFunction(f.options.items)?f.options.items.call(f.element):a(f.options.items,f.element).not(".ui-sortable-helper"),f])}}}}e.push([a.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):a(this.options.items,this.element).not(".ui-sortable-helper"),this]);for(var d=e.length-1;d>=0;d--){e[d][0].each(function(){g.push(this)})}return a(g)},_removeCurrentsFromItems:function(){var d=this.currentItem.find(":data(sortable-item)");for(var c=0;c<this.items.length;c++){for(var b=0;b<d.length;b++){if(d[b]==this.items[c].item[0]){this.items.splice(c,1)}}}},_refreshItems:function(b){this.items=[];this.containers=[this];var h=this.items;var p=this;var f=[[a.isFunction(this.options.items)?this.options.items.call(this.element[0],b,{item:this.currentItem}):a(this.options.items,this.element),this]];var l=this._connectWith();if(l){for(var e=l.length-1;e>=0;e--){var m=a(l[e]);for(var d=m.length-1;d>=0;d--){var g=a.data(m[d],"sortable");if(g&&g!=this&&!g.options.disabled){f.push([a.isFunction(g.options.items)?g.options.items.call(g.element[0],b,{item:this.currentItem}):a(g.options.items,g.element),g]);this.containers.push(g)}}}}for(var e=f.length-1;e>=0;e--){var k=f[e][1];var c=f[e][0];for(var d=0,n=c.length;d<n;d++){var o=a(c[d]);o.data("sortable-item",k);h.push({item:o,instance:k,width:0,height:0,left:0,top:0})}}},refreshPositions:function(b){if(this.offsetParent&&this.helper){this.offset.parent=this._getParentOffset()}for(var d=this.items.length-1;d>=0;d--){var e=this.items[d];if(e.instance!=this.currentContainer&&this.currentContainer&&e.item[0]!=this.currentItem[0]){continue}var c=this.options.toleranceElement?a(this.options.toleranceElement,e.item):e.item;if(!b){e.width=c.outerWidth();e.height=c.outerHeight()}var f=c.offset();e.left=f.left;e.top=f.top}if(this.options.custom&&this.options.custom.refreshContainers){this.options.custom.refreshContainers.call(this)}else{for(var d=this.containers.length-1;d>=0;d--){var f=this.containers[d].element.offset();this.containers[d].containerCache.left=f.left;this.containers[d].containerCache.top=f.top;this.containers[d].containerCache.width=this.containers[d].element.outerWidth();this.containers[d].containerCache.height=this.containers[d].element.outerHeight()}}},_createPlaceholder:function(d){var b=d||this,e=b.options;if(!e.placeholder||e.placeholder.constructor==String){var c=e.placeholder;e.placeholder={element:function(){var f=a(document.createElement(b.currentItem[0].nodeName)).addClass(c||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!c){f.style.visibility="hidden"}return f},update:function(f,g){if(c&&!e.forcePlaceholderSize){return}if(!g.height()){g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10))}if(!g.width()){g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=a(e.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);e.placeholder.update(b,b.placeholder)},_contactContainers:function(d){for(var c=this.containers.length-1;c>=0;c--){if(this._intersectsWith(this.containers[c].containerCache)){if(!this.containers[c].containerCache.over){if(this.currentContainer!=this.containers[c]){var h=10000;var g=null;var e=this.positionAbs[this.containers[c].floating?"left":"top"];for(var b=this.items.length-1;b>=0;b--){if(!a.ui.contains(this.containers[c].element[0],this.items[b].item[0])){continue}var f=this.items[b][this.containers[c].floating?"left":"top"];if(Math.abs(f-e)<h){h=Math.abs(f-e);g=this.items[b]}}if(!g&&!this.options.dropOnEmpty){continue}this.currentContainer=this.containers[c];g?this._rearrange(d,g,null,true):this._rearrange(d,null,this.containers[c].element,true);this._trigger("change",d,this._uiHash());this.containers[c]._trigger("change",d,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder)}this.containers[c]._trigger("over",d,this._uiHash(this));this.containers[c].containerCache.over=1}}else{if(this.containers[c].containerCache.over){this.containers[c]._trigger("out",d,this._uiHash(this));this.containers[c].containerCache.over=0}}}},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c,this.currentItem])):(d.helper=="clone"?this.currentItem.clone():this.currentItem);if(!b.parents("body").length){a(d.appendTo!="parent"?d.appendTo:this.currentItem[0].parentNode)[0].appendChild(b[0])}if(b[0]==this.currentItem[0]){this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")}}if(b[0].style.width==""||d.forceHelperSize){b.width(this.currentItem.width())}if(b[0].style.height==""||d.forceHelperSize){b.height(this.currentItem.height())}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.currentItem.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.currentItem.css("marginLeft"),10)||0),top:(parseInt(this.currentItem.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)){var c=a(e.containment)[0];var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_rearrange:function(g,f,c,e){c?c[0].appendChild(this.placeholder[0]):f.item[0].parentNode.insertBefore(this.placeholder[0],(this.direction=="down"?f.item[0]:f.item[0].nextSibling));this.counter=this.counter?++this.counter:1;var d=this,b=this.counter;window.setTimeout(function(){if(b==d.counter){d.refreshPositions(!e)}},0)},_clear:function(d,e){this.reverting=false;var f=[],b=this;if(!this._noFinalSort&&this.currentItem[0].parentNode){this.placeholder.before(this.currentItem)}this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var c in this._storedCSS){if(this._storedCSS[c]=="auto"||this._storedCSS[c]=="static"){this._storedCSS[c]=""}}this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else{this.currentItem.show()}if(this.fromOutside&&!e){f.push(function(g){this._trigger("receive",g,this._uiHash(this.fromOutside))})}if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!e){f.push(function(g){this._trigger("update",g,this._uiHash())})}if(!a.ui.contains(this.element[0],this.currentItem[0])){if(!e){f.push(function(g){this._trigger("remove",g,this._uiHash())})}for(var c=this.containers.length-1;c>=0;c--){if(a.ui.contains(this.containers[c].element[0],this.currentItem[0])&&!e){f.push((function(g){return function(h){g._trigger("receive",h,this._uiHash(this))}}).call(this,this.containers[c]));f.push((function(g){return function(h){g._trigger("update",h,this._uiHash(this))}}).call(this,this.containers[c]))}}}for(var c=this.containers.length-1;c>=0;c--){if(!e){f.push((function(g){return function(h){g._trigger("deactivate",h,this._uiHash(this))}}).call(this,this.containers[c]))}if(this.containers[c].containerCache.over){f.push((function(g){return function(h){g._trigger("out",h,this._uiHash(this))}}).call(this,this.containers[c]));this.containers[c].containerCache.over=0}}if(this._storedCursor){a("body").css("cursor",this._storedCursor)}if(this._storedOpacity){this.helper.css("opacity",this._storedOpacity)}if(this._storedZIndex){this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex)}this.dragging=false;if(this.cancelHelperRemoval){if(!e){this._trigger("beforeStop",d,this._uiHash());for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}return false}if(!e){this._trigger("beforeStop",d,this._uiHash())}this.placeholder[0].parentNode.removeChild(this.placeholder[0]);if(this.helper[0]!=this.currentItem[0]){this.helper.remove()}this.helper=null;if(!e){for(var c=0;c<f.length;c++){f[c].call(this,d)}this._trigger("stop",d,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){if(a.widget.prototype._trigger.apply(this,arguments)===false){this.cancel()}},_uiHash:function(c){var b=c||this;return{helper:b.helper,placeholder:b.placeholder||a([]),position:b.position,absolutePosition:b.positionAbs,offset:b.positionAbs,item:b.currentItem,sender:c?c.element:null}}}));a.extend(a.ui.sortable,{getter:"serialize toArray",version:"1.7.2",eventPrefix:"sort",defaults:{appendTo:"parent",axis:false,cancel:":input,option",connectWith:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1000}})})(jQuery);
/*
 * $.URLEncode / $.URLDecode - jQuery Plugin
 */
$.extend({URLEncode:function(c){var o='';var x=0;c=c.toString();var r=/(^[a-zA-Z0-9_.]*)/;while(x<c.length){var m=r.exec(c.substr(x));if(m!=null&&m.length>1&&m[1]!=''){o+=m[1];x+=m[1].length;}else{if(c[x]==' ')o+='+';else{var d=c.charCodeAt(x);var h=d.toString(16);o+='%'+(h.length<2?'0':'')+h.toUpperCase();}x++;}}return o;},URLDecode:function(s){var o=s;var binVal,t;var r=/(%[^%]{2})/;while((m=r.exec(o))!=null&&m.length>1&&m[1]!=''){b=parseInt(m[1].substr(1),16);t=String.fromCharCode(b);o=o.replace(m[1],t);}return o;}});
/*
 * Get URL Parameter 
 * gup("urlparameter")
 */
function gup(name){name=name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regexS="[\\?&]"+name+"=([^&#]*)";var regex=new RegExp(regexS);var results=regex.exec(window.location.href);if(results==null){return"";}else{return results[1];}}
/*!
 * One Click Upload - jQuery Plugin
 * Copyright (c) 2008 Michael Mitchell - http://www.michaelmitchell.co.nz
 * Modified by Jonas Westerlund for Piczo
 */
(function($) {
	$.fn.upload = function(options) {
		/** Merge the users options with our defaults */
		options = $.extend({
			name: "file",
			enctype: "multipart/form-data",
			action: "",
			autoSubmit: true,
			submit: function() {},
			complete: function() {},
			select: function() {},
			params: {}
		}, options);

		//return new $.ocupload(this, options);
		return this.each(function() { new $.ocupload($(this), options); });
	},
	
	$.ocupload = function(element, options) {
		/** Fix scope problems */
		var self = this;
	
		/** A unique id so we can find our elements later */
		var id = ++$.ocupload.iframeId;
		
		/** Upload Iframe */
		var iframe = $(
			"<iframe "+
				"id='iframe"+id+"' "+
				"name='iframe"+id+"'"+
			"></iframe>"
		).css({
			display: "none"
		});
		
		/** Form */
		var form = $(
			"<form "+
				"method='post' "+
				"enctype='"+options.enctype+"' "+
				"action='"+options.action+"' "+
				"target='iframe"+id+"'"+
			"></form>"
		).css({
			margin: 0,
			padding: 0
		});

		var elSize = { width: element.outerWidth(), height: element.outerHeight() };
		
		/** File Input */
		var input = $(
			"<input "+
				"name='"+options.name+"' "+
				"type='file' "+
			"/>"
		).css({
			position: "absolute",
			display: "block",
			opacity: 0,
			height: elSize.height,
			zIndex: 999,
			outline: "none"
		});
		
		/** Put everything together */
		//form.append(input).appendTo(element.after(iframe));
		form.append(input).appendTo("#frameStore");
		element.after(iframe);
	
		/** Find the container and make it nice and snug */
		var container = element.css({
			overflow: "hidden",
			position: "relative"
		});
		
		/** Move the input with the mouse to make sure it get clicked! */
		var offset = container.offset();
		input.hide();
		container.add(input).mousemove(function(e) {
			input.show();
			input.css({
				top: e.pageY - input.height() + input.height()/2,
				left: e.pageX - input.width() + 20
			});
		});
		input.mousemove(function(e) {
			input.show();
			if (!hoveringElement(e.pageY,e.pageX)) {
				input.hide();
			} else {
				input.show();
			}
		});
		
		// Comparing cursor position with element position and size to see if the element truly is hovered
		var hoveringElement = function (cursorY, cursorX) {
			offset = container.offset();
			if (offset.top < cursorY && offset.left < cursorX && offset.top + elSize.height > cursorY && offset.left + elSize.width > cursorX) {
				return true;
			}
			return false;
		}
		
		/** Watch for file selection */
		input.change(function() {
			/** Do something when a file is selected. */
			self.select(); 
			
			/** Submit the form automaticly after selecting the file */
			if(self.autoSubmit) {
				self._submit();
			}
		});
		
		/** Methods */
		$.extend(this, {
			autoSubmit: true,
			submit: options.submit,
			complete: options.complete,
			select: options.select,
		
			/** get filename */		
			filename: function() {
				return input.attr("value");
			},
			
			/** get/set params */
			params: function(params) {
				var params = params ? params : false;
				
				if(params) {
					options.params = $.extend(options.params, params);
				}
				else {
					return options.params;
				}
			},
			
			/** get/set name */
			name: function(name) {
				var name = name ? name : false;
				
				if(name) {
					input.attr("name", value);
				}
				else {
					return input.attr("name");
				}
			},
			
			/** get/set action */
			action: function(action) {
				var action = action ? action : false;
				
				if(action) {
					form.attr("action", action);
				}
				else {
					return form.attr("action");
				}
			},
			
			/** get/set enctype */
			enctype: function(enctype) {
				var enctype = enctype ? enctype : false;
				
				if(enctype) {
					form.attr("enctype", enctype);
				}
				else {
					return form.attr("enctype");
				}
			},
			
			/** set options */
			set: function(obj, value) {
				var value =	value ? value : false;
								
				function option(action, value) {
					switch(action) {
						default:
							throw new Error("[jQuery.ocupload.set] \""+action+"\" is an invalid option.");
							break;
						case "name":
							self.name(value);
							break;
						case "action":
							self.action(value);
							break;
						case "enctype":
							self.enctype(value);
							break;
						case "params":
							self.params(value);
							break;
						case "autoSubmit":
							self.autoSubmit = value;
							break;
						case "submit":
							self.submit = value;
							break;
						case "complete":
							self.complete = value;
							break;
						case "select":
							self.select = value;
							break;
					}
				}				
				
				if(value) {
					option(obj, value);
				}
				else {				
					$.each(obj, function(key, value) {
						option(key, value);
					});
				}
			},
			
			/** Submit the form */
			_submit: function() {
				/** Do something before we upload */
				this.submit();
				
				/** add additional paramters before sending */
				$.each(options.params, function(key, value) {
					$("<input/>").attr({ type: "hidden", name: key, value: value }).appendTo(form);
				});
				
				/** Submit the actual form */
				form.submit(); 
				
				/** Do something after we are finished uploading */
				iframe.unbind().load(function() {
					/** Get a response from the server in plain text */
					var myFrame = document.getElementById(iframe.attr("name"));
					var response = myFrame.contentWindow.document; // Give back the document instead
					
					/** Do something on complete */
					self.complete(response); //done :D
				});
			}
		});
	}
	$.ocupload.iframeId = 0;
})(jQuery);


/**
 * WYSIWYG - jQuery plugin 0.5
 *
 * Copyright (c) 2008-2009 Juan M Martinez
 * http://plugins.jquery.com/project/jWYSIWYG
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * $Id: $
 *
 * Modified by Jonas Westerlund for Piczo
 */
(function( $ )
{
		$.fn.document = function()
		{
				var element = this[0];

				if ( element.nodeName.toLowerCase() === 'iframe' ) {
					return element.contentWindow.document;
				}
						/*
						return ( $.browser.msie )
								? document.frames[element.id].document
								: element.contentWindow.document // contentDocument;
						 */
				else
						return $(this);
		};

		$.fn.documentSelection = function()
		{
				var element = this[0];

				if ( element.contentWindow.document.selection )
						return element.contentWindow.document.selection.createRange().text;
				else
						return element.contentWindow.getSelection().toString();
		};

		$.fn.wysiwyg = function( options )
		{
				if ( arguments.length > 0 && arguments[0].constructor === String )
				{
						var action = arguments[0].toString();
						var params = [];

						for ( var i = 1; i < arguments.length; i++ )
								params[i - 1] = arguments[i];

						if ( action in Wysiwyg )
						{
								return this.each(function()
								{
										$.data(this, 'wysiwyg')
										 .designMode();

										Wysiwyg[action].apply(this, params);
								});
						}
						else return this;
				}

				var controls = {};

				/**
				 * If the user set custom controls, we catch it, and merge with the
				 * defaults controls later.
				 */
				if ( options && options.controls )
				{
						var controls = options.controls;
						delete options.controls;
				}

				var options = $.extend({
          html : '<'+'?xml version="1.0" encoding="UTF-8"?'+'><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">STYLE_SHEET</head><body>INITIAL_CONTENT</body></html>',
						css	 : {},

						debug				 : false,

						autoSave		 : false,	// http://code.google.com/p/jwysiwyg/issues/detail?id=11
						rmUnwantedBr : true,	// http://code.google.com/p/jwysiwyg/issues/detail?id=15
						brIE				 : true,

						controls : {},
						messages : {}
				}, options);

				options.messages = $.extend(true, options.messages, Wysiwyg.MSGS_EN);
				options.controls = $.extend(true, options.controls, Wysiwyg.TOOLBAR);

				for ( var control in controls )
				{
						if ( control in options.controls )
								$.extend(options.controls[control], controls[control]);
						else
								options.controls[control] = controls[control];
				}

				// not break the chain
				return this.each(function()
				{
						Wysiwyg(this, options);
				});
		};

		function Wysiwyg( element, options )
		{
				return this instanceof Wysiwyg
						? this.init(element, options)
						: new Wysiwyg(element, options);
		}

		$.extend(Wysiwyg, {
			insertImage : function( szURL, attributes ) {
				alert('Error 41N');
				var self = $.data(this, 'wysiwyg');
				if ( self.constructor === Wysiwyg && szURL && szURL.length > 0 ) {
					if ( attributes ) {
						self.editorDoc.execCommand('insertImage', false, '#jwysiwyg#');
						var img = self.getElementByAttributeValue('img', 'src', '#jwysiwyg#');
	
						if (img) {
							img.src = szURL;
	
							for (var attribute in attributes) {
								img.setAttribute(attribute, attributes[attribute]);
							}
						}
					} else {
						self.editorDoc.execCommand('insertImage', false, szURL);
					}
				}

			},

			createLink : function( szURL )
			{
				var self = $.data(this, 'wysiwyg');

				if ( self.constructor === Wysiwyg && szURL && szURL.length > 0 ) {
					var selection = $(self.editor).documentSelection();

					if ( selection.length > 0 ) {
						self.editorDoc.execCommand('unlink', false, []);
						self.editorDoc.execCommand('createLink', false, szURL);
					} else if ( self.options.messages.nonSelection ) {
						alert(self.options.messages.nonSelection);
					}
				}				
			},
			/*
			insertClip: function (clipUrl) {
				alert('Error 45N');
				var self = $.data(this, 'wysiwyg');
				
				if (self.constructor === Wysiwyg && clipUrl && clipUrl.length > 0) {

					self.editorDoc.execCommand('insertImage', false, '#wysinwygclip#');
					var img = self.getElementByAttributeValue('img', 'src', '#wysinwygclip#');
	
					if (img) {
						img.src = 'http://farm1.static.flickr.com/125/391255054_52907e85be.jpg';
						img.setAttribute('class', 'videoclip');
						img.setAttribute('rel', clipUrl);
					}
				}
			},
			*/
			setContent : function( newContent )
			{
					var self = $.data(this, 'wysiwyg');
							self.setContent( newContent );
							self.saveContent();
			},

			clear : function()
			{
					var self = $.data(this, 'wysiwyg');
							self.setContent('');
							self.saveContent();
			},

			MSGS_EN : {
					nonSelection : 'select the text you wish to link'
			},

			TOOLBAR : {
					bold					: { visible : true, tags : ['b', 'strong'], css : { fontWeight : 'bold' } },
					italic				: { visible : true, tags : ['i', 'em'], css : { fontStyle : 'italic' } },
					strikeThrough : { visible : true, tags : ['s', 'strike'], css : { textDecoration : 'line-through' } },
					underline			: { visible : true, tags : ['u'], css : { textDecoration : 'underline' } },

					separator00 : { visible : true, separator : true },

					justifyLeft		: { visible : true, css : { textAlign : 'left' } },
					justifyCenter : { visible : true, tags : ['center'], css : { textAlign : 'center' } },
					justifyRight	: { visible : true, css : { textAlign : 'right' } },
					justifyFull		: { visible : false, css : { textAlign : 'justify' } },

					separator01 : { visible : false, separator : true },

					indent	: { visible : false },
					outdent : { visible : false },

					separator02 : { visible : false, separator : true },

					subscript		: { visible : false, tags : ['sub'] },
					superscript : { visible : false, tags : ['sup'] },

					separator03 : { visible : false, separator : true },

					undo : { visible : false },
					redo : { visible : false },

					separator04 : { visible : false, separator : true },

					insertOrderedList		 : { visible : false, tags : ['ol'] },
					insertUnorderedList	 : { visible : false, tags : ['ul'] },
					insertHorizontalRule : { visible : false, tags : ['hr'] },

					separator05 : { separator : true },

					createLink : {
						visible : true,
						exec: function() {
							var selection = $(this.editor).documentSelection();
							if ( selection.length > 0 ) {
								if ( $.browser.msie ) {
									this.editorDoc.execCommand('createLink', true, null);
								} else {
									var szURL = prompt('URL', 'http://');
									if ( szURL && szURL.length > 0 ) {
										this.editorDoc.execCommand('unlink', false, []);
										this.editorDoc.execCommand('createLink', false, szURL);
									}
								}
							} else if ( this.options.messages.nonSelection ) {
								alert(this.options.messages.nonSelection);
							}
						},
						tags: ['a']
					},
					/*
					insertClip: {
						visible: true,
						exec: function() {

								var clipUrl = prompt('URL to video clip', 'http://');
								if (clipUrl && clipUrl.length > 0) {
									this.editorDoc.execCommand('createLink', false, '#wysinwygclip#');
									$(this.editorDoc).find('a').each(function() {
										var thelink = $(this); 
										if (thelink.attr('href') == '#wysinwygclip#') {
											thelink.addClass('vidclip');
											thelink.attr('title', clipUrl);
										}
									});
								}
						},
						tags: ['a']
					},
					*/
					insertImage: {
						visible: false,
						exec: function() {
							if ( $.browser.msie ) {
								this.editorDoc.execCommand('insertImage', true, null);
							} else {
								var szURL = prompt('URL', 'http://');
								if ( szURL && szURL.length > 0 ) {
									this.editorDoc.execCommand('insertImage', false, szURL);
								}
							}
						},

						tags : ['a']
					},

					separator06 : { separator : false },

					h1mozilla : { visible : false && $.browser.mozilla, className : 'h1', command : 'heading', arguments : ['h1'], tags : ['h1'] },
					h2mozilla : { visible : false && $.browser.mozilla, className : 'h2', command : 'heading', arguments : ['h2'], tags : ['h2'] },
					h3mozilla : { visible : false && $.browser.mozilla, className : 'h3', command : 'heading', arguments : ['h3'], tags : ['h3'] },

					h1 : { visible : false && !( $.browser.mozilla ), className : 'h1', command : 'formatBlock', arguments : ['Heading 1'], tags : ['h1'] },
					h2 : { visible : false && !( $.browser.mozilla ), className : 'h2', command : 'formatBlock', arguments : ['Heading 2'], tags : ['h2'] },
					h3 : { visible : false && !( $.browser.mozilla ), className : 'h3', command : 'formatBlock', arguments : ['Heading 3'], tags : ['h3'] },

					separator07 : { visible : false, separator : true },

					cut		: { visible : false },
					copy	: { visible : false },
					paste : { visible : false },

					separator08 : { separator : false && !( $.browser.msie ) },

					increaseFontSize : { visible : false && !( $.browser.msie ), tags : ['big'] },
					decreaseFontSize : { visible : false && !( $.browser.msie ), tags : ['small'] },

					separator09 : { separator : false },

					html : {
							visible : false,
							exec		: function()
							{
									if ( this.viewHTML )
									{
											this.setContent( $(this.original).val() );
											$(this.original).hide();
									}
									else
									{
											this.saveContent();
											$(this.original).show();
									}

									this.viewHTML = !( this.viewHTML );
							}
					},

					removeFormat : {
							visible : false,
							exec		: function()
							{
									this.editorDoc.execCommand('removeFormat', false, []);
									this.editorDoc.execCommand('unlink', false, []);
							}
					}
			}
		});

		$.extend(Wysiwyg.prototype,
		{
				original : null,
				options	 : {},

				element	 : null,
				editor	 : null,

				init : function( element, options )
				{
						var self = this;

						this.editor = element;
						this.options = options || {};

						$.data(element, 'wysiwyg', this);

						var newX = element.width || element.clientWidth;
						var newY = element.height || element.clientHeight;

						if ( element.nodeName.toLowerCase() === 'textarea' )
						{
								this.original = element;

								if ( newX === 0 && element.cols )
										newX = ( element.cols * 8 ) + 21;

								if ( newY === 0 && element.rows )
										newY = ( element.rows * 16 ) + 16;

								var editor = this.editor = $('<iframe/>')
									.attr({ id: element.id + "iframe" + Math.random(), frameborder: 0 });

						}

						var panel = this.panel = $('<ul></ul>').addClass('panel');

						this.appendControls();
						this.element = $('<div></div>')
							.addClass('wysiwyg')
							.append(panel)
							.append( $('<div><!-- lol --></div>').css({ clear : 'both' }) )
							.append(editor);

						$(element)
						// .css('display', 'none')
						.hide()
						.before(this.element);

						this.viewHTML = false;

						this.initialHeight = newY - 8;

						/**
						 * @link http://code.google.com/p/jwysiwyg/issues/detail?id=52
						 */
						this.initialContent = $(element).val();

						this.initFrame();

						if ( this.initialContent.length === 0 )
								this.setContent('');

						if ( this.options.autoSave )
								$('form').submit(function() { self.saveContent(); });

						$('form').bind('reset', function()
						{
								self.setContent( self.initialContent );
								self.saveContent();
						});
				},

				initFrame : function()
				{
						var self = this;
						var style = '<style>html,body{padding:0;margin:0}body{font:normal 12px/1.5 arial,sans-serif}</style>';

						/**
						 * @link http://code.google.com/p/jwysiwyg/issues/detail?id=14
						 */
						if ( this.options.css && this.options.css.constructor === String )
								style = '<link rel="stylesheet" type="text/css" media="screen" href="' + this.options.css + '" />';

						this.editorDoc = $(this.editor).document();
						this.editorDoc_designMode = false;

						try {
								this.editorDoc.designMode = 'on';
								this.editorDoc_designMode = true;
						} catch ( e ) {
								// Will fail on Gecko if the editor is placed in an hidden container element
								// The design mode will be set ones the editor is focused

								$(this.editorDoc).focus(function()
								{
										self.designMode();
								});
						}

						this.editorDoc.open();
						this.editorDoc.write(
								this.options.html
										.replace("INITIAL_CONTENT", this.initialContent)
										.replace("STYLE_SHEET", style)
						);
						this.editorDoc.close();
						this.editorDoc.contentEditable = 'true';

						if ( $.browser.msie )
						{
								/**
								 * Remove the horrible border it has on IE.
								 */
								setTimeout(function() { $(self.editorDoc.body).css('border', 'none'); }, 0);
						}

						$(this.editorDoc).click(function( event )
						{
								self.checkTargets( event.target ? event.target : event.srcElement);
						});

						/**
						 * @link http://code.google.com/p/jwysiwyg/issues/detail?id=20
						 */
						$(this.original).focus(function()
						{
								$(self.editorDoc.body).focus();
						});

						if ( this.options.autoSave )
						{
								/**
								 * @link http://code.google.com/p/jwysiwyg/issues/detail?id=11
								 */
								$(this.editorDoc).keydown(function() { self.saveContent(); })
																 .keyup(function() { self.saveContent(); })
																 .mousedown(function() { self.saveContent(); });
						}

						if ( this.options.css )
						{
								setTimeout(function()
								{
										if ( self.options.css.constructor === String )
										{
												/**
												 * $(self.editorDoc)
												 * .find('head')
												 * .append(
												 *		 $('<link rel="stylesheet" type="text/css" media="screen" />')
												 *		 .attr('href', self.options.css)
												 * );
												 */
										}
										else
												$(self.editorDoc).find('body').css(self.options.css);
								}, 0);
						}

						$(this.editorDoc).keydown(function( event )
						{
								if ( $.browser.msie && self.options.brIE && event.keyCode === 13 )
								{
										var rng = self.getRange();
												rng.pasteHTML('<br />');
												rng.collapse(false);
												rng.select();

						return false;
								}
						});
				},

				designMode : function()
				{
						if ( !( this.editorDoc_designMode ) )
						{
								try {
										this.editorDoc.designMode = 'on';
										this.editorDoc_designMode = true;
								} catch ( e ) {}
						}
				},

				getSelection : function()
				{
						return ( window.getSelection ) ? window.getSelection() : document.selection;
				},

				getRange : function()
				{
						var selection = this.getSelection();

						if ( !( selection ) )
								return null;

						return ( selection.rangeCount > 0 ) ? selection.getRangeAt(0) : selection.createRange();
				},

				getContent : function()
				{
						return $( $(this.editor).document() ).find('body').html();
				},

				setContent : function( newContent )
				{
						$( $(this.editor).document() ).find('body').html(newContent);
				},

				saveContent : function()
				{
						if ( this.original )
						{
								var content = this.getContent();

								if ( this.options.rmUnwantedBr )
										content = ( content.substr(-4) === '<br>' ) ? content.substr(0, content.length - 4) : content;

								$(this.original).val(content);
						}
				},

				appendMenu : function( cmd, args, className, fn )
				{
						var self = this;
						var args = args || [];

						$('<li></li>').append(
								$('<a><!-- --></a>').addClass(className || cmd)
						).mousedown(function() {
								if ( fn ) fn.apply(self); else self.editorDoc.execCommand(cmd, false, args);
								if ( self.options.autoSave ) self.saveContent();
						}).appendTo( this.panel );
				},

				appendMenuSeparator : function()
				{
						$('<li class="separator"></li>').appendTo( this.panel );
				},

				appendControls : function()
				{
						for ( var name in this.options.controls )
						{
								var control = this.options.controls[name];

								if ( control.separator )
								{
										if ( control.visible !== false )
												this.appendMenuSeparator();
								}
								else if ( control.visible )
								{
										this.appendMenu(
												control.command || name, control.arguments || [],
												control.className || control.command || name || 'empty', control.exec
										);
								}
						}
				},

				checkTargets : function( element )
				{
						for ( var name in this.options.controls )
						{
								var control = this.options.controls[name];
								var className = control.className || control.command || name || 'empty';

								$('.' + className, this.panel).removeClass('active');

								if ( control.tags )
								{
										var elm = element;

										do {
												if ( elm.nodeType != 1 )
														break;

												if ( $.inArray(elm.tagName.toLowerCase(), control.tags) != -1 )
														$('.' + className, this.panel).addClass('active');
										} while ( elm = elm.parentNode );
								}

								if ( control.css )
								{
										var elm = $(element);

										do {
												if ( elm[0].nodeType != 1 )
														break;

												for ( var cssProperty in control.css )
														if ( elm.css(cssProperty).toString().toLowerCase() === control.css[cssProperty] )
																$('.' + className, this.panel).addClass('active');
										} while ( elm = elm.parent() );
								}
						}
				},

				getElementByAttributeValue : function( tagName, attributeName, attributeValue )
				{
						var elements = this.editorDoc.getElementsByTagName(tagName);

						for ( var i = 0; i < elements.length; i++ )
						{
								var value = elements[i].getAttribute(attributeName);

								if ( $.browser.msie )
								{
										/** IE add full path, so I check by the last chars. */
										value = value.substr(value.length - attributeValue.length);
								}

								if ( value === attributeValue )
										return elements[i];
						}

						return false;
				}
		});
})(jQuery);

var jsonStorage = $("#tags");
var json = {};
if (jsonStorage.length > 0 && jsonStorage.val().length > 0) {
	json = JSON.parse(jsonStorage.val());
}


function createAddClip(e) {
	var cont = $(e).parent();
	var val = cont.find('input').val();

	// Validate html here
	var tempEl = $("<div/>").html(val);
	cont.html(tempEl.html());
	
}

(function($) {
	var win = $(window), doc = $(document);


	/* Creator constructor */
	var Creator = function(el, settings) {
		var self = this;

		self.addUnit = function(l, settings) {
			var u = new Unit(l, settings);
			var uEl = u.element;
			if (-1 === $.inArray(u, units)) {
				units.push(u);
				u.remove.bind("click.creator", function() {
					self.removeUnit(u);
				});
			}
			if (0 === uEl.closest("body").length) {
				uEl.appendTo(el);
				u.show();
			}
			u.enableEdit();
			el.sortable("refresh");
			return self;
		};

		self.addUnits = function(els, settings) {
			$.each(els, function(i, el) {
				self.addUnit(el, settings);
			});
			return self;
		};

		self.removeUnit = function(u) {
			var i = $.inArray(u, units);
			if (-1 !== i) {
				// Splice away the removed unit
				units.splice(i, 1);
			}
			u.destroy();
			return self;
		};

		self.update = function() {
			var children = el.children().get();
			// Replace units array with sorted one
			units = $.map(children, function(l, i) {
				return $.data(l, "obj");
			});
		}

		self.destroy = function() {
			for (unit in units) {
				if (unit instanceof Unit) {
					unit.destroy();
				}
			}
			for (prop in self) {
				delete self[prop];
			}
			self = units = settings = el = null;
		};

		// Save everything to server
		self.save = function(form, callback) {
			if ("form" !== form.tagName.toLowerCase()) {
				throw new TypeError("Gimme a form, gosh!");
			}
			
			$("#submit-wrapper button").attr("disabled",true);

			/*
			 * Operations to make input compatible with backend
			 */
			
			/*
			 * Check if post title is the same as default and in that case 
			 * (if this is NOT an edit), set it to blank so backend can respond 
			 * with a proper error message.
			 */
			var postTitle = $("#title").val();
			/*if (repost !== "1") {
				if (postTitle == preFilledTitle) {
					postTitle = "";
				}
			}*/
			
			// Set typeAsInt to tell backend if its an outfit or regular post. 1 = outfit post. 2 = regular post.
			var typeAsInt = 2;
			if (form.postTypeOutfit.checked) {
				typeAsInt = 1;
			}
			var postUrl = form.action + "&blogId=" + form.blogId.value;
			var elements = $.map(units,
				function(u, i) {
					return u.getData();
				}
			);
			// Remove imagePointsHTMLId because backend dont want it
			if ("undefined" !== typeof json) {
				for (var i in json.elements) {
					for (var j in json.elements[i].imagePoints) {
						delete json.elements[i].imagePoints[j].imagePointsHTMLId;
					}
					// Merge in image tagging JSON into elements JSON (if it ISNT a regular blogpost edit, aka type=2)
					if (gup("type") !== "2") {
						elements.push(json.elements[i]);
					}
				}
			}

			var tags = form.categories ?
				JSON.parse(form.categories.value || "[]" /* explodes if empty */) :
				[];
			
			var data = {
				title: postTitle,
				tags: tags,
				typeAsInt: typeAsInt,
				elements: elements
			};

			$.ajax({
				url: postUrl,
				type: "post",
				data: { json: JSON.stringify(data) },
				success: callback
			});

			return self;
		};

		settings = $.extend({
				clone: false,
				items: "> div",
				cancel: "a, input, textarea",
				containment: "#main-create",
				distance: 10,
				revert: true,
				update: self.update,
				start: function(e, ui) {
					if (ui.item.find("textarea").data("wysiwyg")) {
						ui.item.data("obj").disableEdit();
					}
				},
				stop: function(e, ui) {
					ui.item.data("obj").enableEdit();
				}
			},
			settings
		);

		if (false === el instanceof $) {
			throw new TypeError("First argument must be a jQuery object, gosh!");
		}
		el.sortable(settings);

		var units = [];

	};

	/* Unit constructor */
	var Unit = function(el, settings) {
		var self = this;

		settings = $.extend({ type: null, speed: "fast", id: null }, settings);

		if (false === el instanceof $) {
			el = $(el);
		}	else if ("object" !== typeof el) {
			throw new TypeError("That's not an element or jQuery object, gosh!");
		}

		// Make sure we can get the corresponding element from the object and vice versa
		self.element = el.attr("unselectable", "on"); // For IE
		$.data(el.get(0), "obj", self);

		self.show = function() {
			el
				.hide()
				.css({ opacity: 0 })
				.animate({ height: "show", paddingTop: "show", paddingBottom: "show" }, settings.speed, function() {
					el.animate({ opacity: 1 }, settings.speed);
				});

			return self;
		};

		/* Returns an object that gets encoded to JSON later
		 * photo: { contentId: 123 }
		 * text: { content: "some text"[, id: 123] }
		 * video: {content: "http://..."[, id: 123] }
		 */
		self.getData = function() {
			var t = settings.type;
			var ret = {};
			ret.typeAsInt = t;

			// Get existing id and pass it along when saving
			var id = el.find("*").andSelf().filter("div[id]").eq(0).attr("id");
			if ("undefined" !== typeof id) {
				id = id.match(/(\d+)/);
				null === id || (id = Number(id[0]));
			}

			if (Unit.types.text.id === t) {
				// text
				var area = el.find("textarea");
				if (area.data("wysiwyg")) {
					area.data("wysiwyg").saveContent();
				}
				ret.content = area.val();
				ret.id = id;
			} else if (Unit.types.photo.id === t) {
				// Image ID
				ret.contentId = el.find("img").attr("id");
			} else if (Unit.types.video.id === t) {
				ret.content = el.find('.content').html();
				ret.id = id;
			}
			return ret;
		};

		self.enableEdit = function() {
			// Re-init jwysiwyg
			el.find("textarea").siblings().remove().end().wysiwyg();
			return self;
		}

		self.disableEdit = function() {
			var area = el.find("textarea");
			area.data("wysiwyg").saveContent();
			return self;
		}

		// Turn video input val into video
		self.showVideo = function(e) {
			e.preventDefault();
			var val = el.find('input').val();
			// Validate html here
			var temp = $("<div/>").html(val);
			var cont = el.children(".content").empty().append(temp.html());
			return self;
		}
		// Turn it back
		self.hideVideo = function(e) {
			e.preventDefault();
			var cont = el.children(".content");
			var val = cont.html() || "";
			cont.empty().append(Unit.types.video.html).find("input[type='text']").val($.trim(val));
			el.find("button").bind("click.unit", self.showVideo);
			return self;
		}

		self.destroy = function() {
			el.animate({ opacity: 0 }, settings.speed, function() {
				el.animate({ height: "hide", paddingTop: "hide", paddingBottom: "hide" }, settings.speed, function() {
					el.empty().remove();
					for (prop in self) {
						delete self[prop];
					}
					self = settings = el = remove = null;
				});
			});
		};

		if (Unit.types.photo.id === settings.type && 0 === el.find("img").length) {
			$("<img/>").bind("load.unit", function() {
				$(this).fadeIn("fast");
			})
			.attr({ src: settings.source, id: settings.id })
			.appendTo(el.children().slice(-1));
		} else if (Unit.types.video.id === settings.type) {
			// Edit video link, gets shown/hidden by self.showVideo/hideVideo
			el.find("button").bind("click.unit", self.showVideo);
		}

		// Remove button
		self.remove = $("<span/>")
			.addClass("del-s")
			.appendTo(el);
	};

	// The different types of units
	Unit.types = {
		video: {
			id: 3,
			html: '<div class="unit video"><div class="content">\
						<div class="pre">\
							<input type="text" name="video_url" class="text big-form"/>\
							<button class="submit button-text" type="submit" style="width:90px;"><span class="ok-m" style="text-indent:30px;zoom:1"/>Add</button>\
							<div style="clear:left;"><em>Insert embed code from Youtube, Myspace or Dailymotion.</em></div>\
						</div>\
					</div></div>'
		},
		text: {
			id: 2,
			html: "<div class='unit text'><div class='content'><textarea></textarea></div></div>"
		},
		photo: {
			id: 1,
			html: "<div class='unit photo'><div class='content'></div></div>"
		}
	};

	var createArea = $("#create-area");
	var creator = new Creator(createArea);

	if (0 !== createArea.children().length) {
		createArea.children().each(function() {
			var type = this.className.match(/unit (\w+)/)[1] || null;
			if ("undefined" !== typeof Unit.types[type]) {
				type = Unit.types[type].id;
			} else if (type == null) {
				type = Unit.types.text.id;
			}

			if (Unit.types.photo.id === type) {
				var src = this.getElementsByTagName("img")[0].getAttribute("src");
			}
			creator.addUnits($(this), { type: type, source: (src || null) });
		});
	}

	createArea.parent().find(".add-text").click(function(e) {
		e.preventDefault();
		creator.addUnit(
			$(Unit.types.text.html),
			{ type: Unit.types.text.id }
		);
	});
	

	createArea.parent().find(".add-video").click(function(e) {
		e.preventDefault();
		creator.addUnit(
			$(Unit.types.video.html),
			{ type: Unit.types.video.id }
		);
	});
	

	var form = $("#createForm").submit(function(e) {
		e.preventDefault();
		
		if ($("#postTypeOutfit").checked) {
			$("#create-area div.unit").remove();
		} else {
			$("#outfitpost-wrapper div.add-image div.unit").remove();
		}
		
		creator.save(this, function(data) {
			// Saved!! Forwarding user to the created blog post.
			data = JSON.parse(data);
			
			if (data.success == true) {
				if ($.URLDecode($.URLDecode(gup('postId'))).length > 0) { // Edit post
					window.location.href = "http://" + $("#blogName").val() + ".piczo.com/post/" + $.URLDecode(gup('postId')) + "/" + $.URLEncode($("#title").val());
				} else { // New post
					var blogName = $("#blogId option[value=" + $("#blogId").val() + "]").html();
					window.location.href = "http://" + blogName + ".piczo.com/";
				}
			} else if ("undefined" !== typeof data.response) {
				$("#submit-wrapper button").attr("disabled", false);
				var responses = $("#createResponses");
				responses.html("");
				for (var i in data.response) {
					responses.append("<li>" + data.response[i] + "</li>");
				}
			}
		});
	});

	var uploadImage = function() {
		var action = "/go/uploadblogimage?image";
		createArea.parent().find(".add-photo").upload({
			action: action,
			data:  { hup: "foo" },
			method: "post",
			submit: function() {
				$.fn.colorbox({width: 300, inline:true, href:"#loading", open: true, unClosable: true, overlayClose: false});
			},
			complete: function(response) {
				$.fn.colorbox.close();
				var img = $("img", response);
				var id = img.attr("id") || -1;
				var src = img.attr("src");
				var thumb = img.attr("lowsrc");

				if ("string" === typeof src) {
					creator.addUnit(
						$(Unit.types.photo.html),
						{
							type: Unit.types.photo.id,
							source: src,
							id: id
						}
					);
				}
				// New instance
				uploadImage();
			}
		});
	}
	
	// Switching between taggable outfit images
	var imageSwitch = function(el) {
		var self = $(el);
		var bigImage = $("#main-image div.img-wrapper div.unit");
		var additionalImageHolder = $("#outfitpost-wrapper div.additional-images");
		jsonStorage.val(JSON.stringify(json));
		
		// Find the images to switch between and change their src so they are the correct size
		var foo = bigImage.find("img").attr("src");
		bigImage.find("img").attr("src",bigImage.find("img").attr("data-altimg")).attr("data-altimg",foo);
		foo = self.find("img").attr("src");
		self.find("img").attr("src",self.find("img").attr("data-altimg")).attr("data-altimg",foo);
		
		// Replacing the image with eachother
		$("#main-image").parent().css({ "min-height": bigImage.height() + "px" });
		bigImage = bigImage.replaceWith(self.clone());
		self = self.replaceWith(bigImage.clone());
		
		// Remove leftover tags
		$("#main-image > .tag, #main-image > .tagForm, #tagInfo li").remove();
		
		// Bind imageSwitch to click event
		$("#outfitpost-wrapper div.additional-images div.unit img").click(function(event) {
			event.preventDefault();
			imageSwitch($(this).parent());
		});
		
		// Write existing tags to the new main image and bind initTagging to clicks on the main image
		$("#main-image img")
			.writeTags({ editMode: true })
			.click( function() {
				initTagging(this);
			});
		
		// Bind removeTag to clicks on the new tags remove-button
		$("#tagInfo li a.cross").click(function() {
			removeTag($(this).attr("data-imageid"),$(this).attr("data-tagid"));
		});
		
		// Bind deleteOutfitPhoto to clicks on the new main image's remove button
		$("#outfitpost-wrapper span.del-s").click( function() {
			deleteOutfitPhoto(this);
		});
	}
	
	// Count the number of tags and make sure the tags has the correct number
	var recalcTagNumber = function(imageId) {
		var count = 1;
		var arrayCounter = 1;
		$("#tagInfo li strong .number").each(function() {
			$(this).text("0" + count);
			count++;
		});
		
		count = 1;
		$("#main-image .tag").filter(".done").each(function() {
			$(this)
			.attr("class","")
			.addClass("done")
			.addClass("tag")
			.addClass("number-" + count);
			count++;
		});
		
		if ("undefined" !== typeof json) {
			for (var i in json.elements) {
				if (json.elements[i].contentId == imageId) { // elements exist
					arrayCounter = json.elements[i].imagePoints.length;
				}
			}
		}
		return arrayCounter;
	}
	
	// Delete a tag from json
	var tagNumber = 1;
	var removeTag = function(imageId,tagId) {
		
		for (var i in json.elements) {
			if (json.elements[i].contentId == imageId) { // elements exist
				for (var j in json.elements[i].imagePoints) {
					if ("undefined" !== typeof json.elements[i].imagePoints[j].id) {
						json.elements[i].imagePoints[j].imagePointsHTMLId = json.elements[i].imagePoints[j].id;
					}
					if (json.elements[i].imagePoints[j].imagePointsHTMLId == tagId) { // imagePoints exist	
						json.elements[i].imagePoints.splice(j,1);
					}
				}
			}
		}
		$("#" + tagId + "-tag").remove();
		$("#" + tagId + "-taginfo").remove();
		recalcTagNumber();
		jsonStorage.val(JSON.stringify(json));
	}
	
	// Save a tag to json
	var saveTag = function(imageId,id,item,brand,store,x,y) {
		var elementExist = false;
		var imagePointExist = false;
		var i;
		var j;
		var match;

		for (i in json.elements) {
			if (json.elements[i].contentId == imageId) { // element exist
				elementExist = true;
				match = i;
				for (j in json.elements[i].imagePoints) {
					if (json.elements[i].imagePoints[j].id == id) { // imagePoint exist
						imagePointExist = true;
						json.elements[i].imagePoints[j].xCoordinate = x;
						json.elements[i].imagePoints[j].yCoordinate = y;
						json.elements[i].imagePoints[j].imagePointsHTMLId = id;
						json.elements[i].imagePoints[j].imageTags[0].label = item;
						json.elements[i].imagePoints[j].imageTags[1].label = brand;
						json.elements[i].imagePoints[j].imageTags[2].label = store;
					}
				}
			}
		}
		if (!imagePointExist) { // imagePoint not exist
			var foo = json.elements[match].imagePoints;
			foo.push({ 
				// in firefox, x will be a float
				xCoordinate: parseInt(x), 
				yCoordinate:  parseInt(y),
				imagePointsHTMLId: id,
				imageTags: []
			});
			j = json.elements[match].imagePoints.length - 1;
			foo = json.elements[match].imagePoints[j].imageTags;
			foo.push({ typeAsInt: 1, label: item });
			foo.push({ typeAsInt: 2, label: brand });
			foo.push({ typeAsInt: 3, label: store });
		}
		jsonStorage.val(JSON.stringify(json));
	}
	
	var tagNumber = 10;
	var maxTags = 7;

	/** Form */
	var tagFormHandler = function(self,x,y) {
		var imageId = self.attr("data-imageid");
		var tagForm = self.parents(4).find(".tagForm");
		var tagFormID = tagForm.attr("id");
		var y = y;
		var x = x;
		var tag;

		if (tagForm.length > 0 ) {
			tagForm
				.css({
					top: y + "px",
					left: x + "px"
				})
				.find("input[name=x]").attr("value",x)
				.end()
				.find("input[name=y]").attr("value",y);
			
			tag = $("#" + tagFormID + "-tag");
			tag.css({
				top: y - 8  + "px",
				left: x - 8  + "px"
			});
				
		} else if (recalcTagNumber(imageId) < 6) { // No more than 6 tags is allowed per image
			var setId = "";
			tagFormID = tagNumber++;
			setId = "<input name='imagePointId' type='hidden' value='" + tagFormID + "' />";
			tagForm = $(
					"<div class='tagForm' id='"+ tagFormID +"'>"+
					"<form method='post' action='tagImage'>"+
					"<input name='x' id='x' type='hidden' value='" + x + "' />"+
					"<input name='y' id='y' type='hidden' value='" + y + "' />"+
					setId +
					"<label>ITEM:</label><input name='item' id='item' type='text' class='text' maxlength='20' />"+
					"<label>BRAND:</label><input name='brand' id='brand' type='text' class='text' maxlength='20' />"+
					"<label>STORE:</label><input name='store' id='store' type='text' class='text' maxlength='20' />"+
					"<button type='submit' class='button-text'><span class='ok-m'></span>DONE</button>"+
					"</form>"+
					"<a class='close'><span class='block-s'></span>CANCEL</a>"+
					"</div>"
			).css({
				top: y + "px",
				left: x + "px",
				"Zoom": 1
			})
			.appendTo($("#main-image"));
			if ($.browser.msie && $.browser.version < 7) {
				tagForm.css({ "Zoom": 1 });
			}
			tag = $(
				"<div id='"+ tagFormID +"-tag' class='tag' data-tagid='" + tagFormID + "' data-imageid='" + imageId + "' ></div>"
			).css({
				top: y - 8 + "px",
				left: x - 8 + "px",
				"Zoom": 1
			})
			.appendTo($("#main-image"));
			if ($.browser.msie && $.browser.version < 7) {
				tag.css({ "Zoom": 1 });
			}
			
			tagForm.find("form").submit(function(event) {
				event.preventDefault();
				var inputItem = tagForm.find("input[name=item]").val();
				var inputBrand = tagForm.find("input[name=brand]").val();
				var inputStore = tagForm.find("input[name=store]").val();
				var tmpX = tagForm.find("input[name=x]").val();
				var tmpY = tagForm.find("input[name=y]").val();
				
				if (inputItem.length > 0 && inputBrand.length > 0 && inputStore.length > 0) {
					saveTag(imageId,tagFormID,inputItem,inputBrand,inputStore,tmpX,tmpY);
					
					var newTag = $(
						"<li id='" + tagFormID + "-taginfo' class='delete' style='display: none;'><strong><span class='number'>0"+ tagNumber +"</span><a data-imageid='" + imageId + "' data-tagid='" + tagFormID + "' class='cross'></a></strong><div>"+
						"<div class='wrapper'><label>Item:</label><span>" + inputItem + "</span></div>"+
						"<div class='wrapper'><label>Brand:</label><span>" + inputBrand + "</span></div>"+
						"<div class='wrapper'><label>Store:</label><span>" + inputStore + "</span></div>"+
						"</div></li>"
					);
					$("#tagInfo").append(newTag);
					
					newTag.find("a.cross").click(function(event) {
						removeTag(imageId,tagFormID);
						recalcTagNumber();
					});
					newTag.fadeIn();
					if ($.browser.msie) { // force layout in ie
						newTag.find("a.cross").height();
					}
					
					tag.css({ "margin-left": -28, "margin-top": -2 }).addClass("number-" + recalcTagNumber(imageId)).addClass("done");
					recalcTagNumber();
					tagForm.remove();
				} else {
					if (tagForm.find("h5.error").length == 0) {
						tagForm.prepend("<h5 class='error'>All fields are required</h5>");
					}
				}
			});
			
			tagForm.find("a.close").click(function(event) {
				tagForm.remove();
				tag.remove();
			});
			
			tagForm.find("input[name=item]").focus();
		} else {
			tagForm = $(
					"<div class='tagForm'>"+
					"<a class='close'>You can't have more than 6 tags. Sorry!</a>"+
					"</div>"
			).css({
				top: y + "px",
				left: x + "px"
			})
			.appendTo($("#main-image"));
			
			tagForm.find("a.close").click(function(event) {
				tagForm.remove();
			});
		}
	}
	
	var deleteOutfitPhoto = function(self) {
		var self = $(self);
		var imageId = self.siblings("img").attr("data-imageid");
		var success = false;
		for (var i in json.elements) {
			if (json.elements[i].contentId == imageId) { // elements exist
				json.elements.splice(i,1);
				success = true;
			}
		}
		if (success) {
			if (self.parents(2).hasClass("img-wrapper")) {
				self.parent().after("<div class='add-outfit-photo'></div>");
				$("#main-image .tag").remove();
				$("#tagInfo li").remove();
			} else {
				self.parent().after("<div class='additional-image add-outfit-photo'></div>");
			}
			self.parent().remove();
			jsonStorage.val(JSON.stringify(json));
			
			outfitUpload(); // create new upload form
		}
	}
	
	// Make the main image taggable
	var tagNumber;
	var x;
	var y;
	var initTagging = function(el) {
		var self = $(el);
		self.click(function(event) {
			event.preventDefault();
			var offset = self.offset();
			if ($.browser.msie) {
				x = event.pageX - offset.left;
				y = event.pageY - offset.top;
			} else {
				x = event.pageX - offset.left + 8;
				y = event.pageY - offset.top + 8;
			}
			tagFormHandler(self,x,y);
		});
	}
	
	// Controlling the flow on the create page
	var repost = gup('repost');
	var postTitle = $("#title");
	var preFilledTitle = postTitle.val();
	var flowController = function() {
		var action = $("#what");
		var newSite = $('#newsite-wrapper');
		var newBlogPost = $("#newblog-wrapper");
		var chooseSite = $("#siteId");
		var createForm = $("#createForm");
		var chooseBlog = $("#blogId");
		var blogPostCheckbox = $("#postTypePost").parent();
		var outfitPostCheckbox = $("#postTypeOutfit").parent();
		var blogPost = $("#blogpost-wrapper");
		var outfitPost = $("#outfitpost-wrapper");
		var submitButtons = $("#submit-wrapper");

		var choice;
		
		action.show();
		if (gup('response').length > 0) {
			$("#postResponse").html($.URLDecode(gup('response')));
		}
		if (gup('postId').length > 0) {
			action.hide();
			chooseBlog.hide();
			if (gup('type') == "1") { // Outfit post edit
				postTitle.removeClass("hidden");
				createForm.removeClass("hidden");
				outfitPost.removeClass("hidden");
				
				if ($.browser.msie) {
					$("#add-tags-ie").show();
				}
				$("#outfitpost-wrapper > .add-image").css({ "background-image": "none" });
			} else { // Blog post edit
				postTitle.removeClass("hidden");
				createForm.removeClass("hidden");
				blogPost.removeClass("hidden");
			}
			submitButtons.removeClass("hidden");
		} else if(repost == "1") {
			action.val("updateBlog");
			chooseBlog.val($.URLDecode(gup('blog')));
			postTitle.val($.URLDecode(gup('title')));
			postTitle.removeClass("hidden");
			createForm.removeClass("hidden");
			blogPostCheckbox.removeClass("hidden");
			outfitPostCheckbox.removeClass("hidden");
			submitButtons.removeClass("hidden");
			
			if (gup('type') == "1") {
				outfitPost.removeClass("hidden");
				outfitPostCheckbox.find("input").attr("checked",true).attr("disabled",true);
				blogPost.remove();
				
				if ($.browser.msie) {
					$("#add-tags-ie").show();
				}
				
				blogPostCheckbox
					.fadeTo("normal",0.2)
					.click(function() {
						window.location.href = "http://" + window.location.host + "/go/create?repost=1&type=2&blog=" + chooseBlog.val() + "&title=" + postTitle.val() + "";
					})
					.find("input").attr("disabled",true);
			} else if (gup('type') == "2") {
				blogPost.removeClass("hidden");
				blogPostCheckbox.find("input").attr("checked",true).attr("disabled",true);
				outfitPost.remove();
				
				outfitPostCheckbox
					.fadeTo("normal",0.2)
					.click(function() {
						window.location.href = "http://" + window.location.host + "/go/create?repost=1&type=1&blog=" + chooseBlog.val() + "&title=" + postTitle.val() + "";
					})
					.find("input").attr("disabled",true);
			}
		} else if(gup('blogName').length > 0) {
			action.val("newBlog");
			postTitle.removeClass("hidden");
			createForm.removeClass("hidden");
			blogPostCheckbox.removeClass("hidden");
			outfitPostCheckbox.removeClass("hidden");
			chooseBlog.val($.URLDecode(gup('blogName')));
		} else if(gup('siteName').length > 0) {
			action.val("updateSite");
			chooseSite.removeClass("hidden");
			chooseSite.find("select").val($.URLDecode(gup('siteName')));
			chooseSite.find(".submit").attr("href",chooseSite.find("select").val()).removeClass("hidden");
		} else if(gup('pre').length > 0) {
			if (gup('pre') === "1") {
				action.val("updateBlog");
				createForm.removeClass("hidden");
				
				newSite.addClass("hidden");
				newBlogPost.addClass("hidden");
				chooseSite.addClass("hidden");
				
			} else if (gup('pre') === "2") {
				action.val("updateSite");
				chooseSite.removeClass("hidden");
				
				newSite.addClass("hidden");
				newBlogPost.addClass("hidden");
				createForm.addClass("hidden");
				
			} else if (gup('pre') === "3") {
				action.val("newBlog");
				newBlogPost.removeClass("hidden");
				
				newSite.addClass("hidden");
				chooseSite.addClass("hidden");
				createForm.addClass("hidden");
				
			} else if (gup('pre') === "4") {
				action.val("newSite");
				newSite.removeClass("hidden");
				
				newBlogPost.addClass("hidden");
				chooseSite.addClass("hidden");
				createForm.addClass("hidden");
			}
		}
		action.change(function () {
			if (action.val() !== "0") {
				choice = action.val();
				
				if (choice == "updateSite") {
					chooseSite.removeClass("hidden");
					
					newSite.addClass("hidden");
					newBlogPost.addClass("hidden");
					createForm.addClass("hidden");
					

				} else if (choice == "updateBlog") {
					createForm.removeClass("hidden");
					
					newSite.addClass("hidden");
					newBlogPost.addClass("hidden");
					chooseSite.addClass("hidden");
					
				} else if (choice == "newSite") {
					newSite.removeClass("hidden");
					
					newBlogPost.addClass("hidden");
					chooseSite.addClass("hidden");
					createForm.addClass("hidden");
					
				} else if (choice == "newBlog") {
					newBlogPost.removeClass("hidden");
					
					newSite.addClass("hidden");
					chooseSite.addClass("hidden");
					createForm.addClass("hidden");
				}
			}
		});
		
		// Binding all click/change events
		blogPostCheckbox.click(function() {
			outfitPostCheckbox
				.unbind('click')
				.fadeTo("normal",0.2)
				.click(function() {
					window.location.href = "http://" + window.location.host + "/go/create?repost=1&type=1&blog=" + chooseBlog.val() + "&title=" + postTitle.val() + "";
				})
				.find("input").attr("disabled",true);
			outfitPost.remove();
			
			blogPostCheckbox.find("input").attr("checked","checked").attr("disabled",true);
			
			blogPost.removeClass("hidden");
			submitButtons.removeClass("hidden");
		});
		
		outfitPostCheckbox.click(function() {
			blogPostCheckbox
				.unbind('click')
				.fadeTo("normal",0.2)
				.click(function() {
					window.location.href = "http://" + window.location.host + "/go/create?repost=1&type=2&blog=" + chooseBlog.val() + "&title=" + postTitle.val() + "";
				})
				.find("input").attr("disabled",true);
			blogPost.remove();
			
			outfitPostCheckbox.find("input").attr("checked","checked").attr("disabled",true);
			
			outfitPost.show();
			outfitPost.removeClass("hidden");
			submitButtons.removeClass("hidden");
		});
		
		chooseSite.find("select").change(function() {
			// Prevent opening in new tab
			chooseSite.find(".submit").attr({ href: "#", rel: $(this).val() }).removeClass("hidden")
				.bind("click", function(e) { e.preventDefault(); window.location.href = this.rel; });
		});
		
		chooseBlog.change(function() {
			if (chooseBlog.val() !== "0") {
				postTitle.removeClass("hidden");
				blogPostCheckbox.removeClass("hidden");
				outfitPostCheckbox.removeClass("hidden");
			}
		});
	}
	
	// Outfit image uploader (semi-quickfix)
	var outfitUpload = function () {
		var formId = 1;
		var bg;
		var action = "/go/uploadoutfitimage?image";
 		$("#outfitpost-wrapper .add-outfit-photo")
		.upload({
			action: action,
			data:  { hup: "foo" },
			method: "post",
			submit: function() {
				$.fn.colorbox({width: 300, inline:true, href:"#loading", open: true, unClosable: true, overlayClose: false});
			},
			complete: function(response) {
				$.fn.colorbox.close();
				var img = $("img", response);
				var id = img.attr("id") || -1;
				var src = img.attr("src");
				var thumb = img.attr("lowsrc");

				if ("string" === typeof src) {
					$("form[target='iframe" + formId + "']").remove();
					
					if ("undefined" === typeof json.elements) {
						json.elements = [];
					}
					json.elements.push({ 
						contentId: id,
						typeAsInt: Unit.types.photo.id,
						imagePoints: []
					});
					jsonStorage.val(JSON.stringify(json));
					
					var mainImage = $("#main-image div.img-wrapper");
					var addImages = $("#outfitpost-wrapper div.additional-images");
					var uploadedImage;
					if (mainImage.find(".add-outfit-photo").length == 0) {
						uploadedImage = $("<div class='unit photo'><span class='del-s'></span><img src='" + thumb + "' alt='' data-altimg='" + src + "' data-imageid='" + id + "' /></div>");
						$("#outfitpost-wrapper div.additional-images div.add-outfit-photo:first").remove();
						if (formId == 3) {
							addImages.append(uploadedImage);
						} else {
							addImages.prepend(uploadedImage);
						}
						addImages.find("div.unit").click(function(event) {
							event.preventDefault();
							imageSwitch(this);
						});
					} else {
						uploadedImage = $("<div class='unit photo'><span class='del-s'></span><img src='" + src + "' alt='' data-altimg='" + thumb + "' data-imageid='" + id + "' /></div>");
						$("#main-image").css({ "background-image": "none" });
						mainImage.html(uploadedImage);
						$("#main-image").parent().css({ "min-height": uploadedImage.height() + "px" });
						mainImage.find("img").each(function() { initTagging(this); });
						
						if ($.browser.msie) {
							$("#add-tags-ie").fadeIn();
						}
					}
					uploadedImage.find(".del-s").click( function() {
						deleteOutfitPhoto(this);
					});
					formId++;
				}
			}
		});
	}
	
	var categoryArray = [];
	$(document).ready(function() {
		$("#category").each(function() {
			var self = $(this);
			var button = self.parent().find("button.button-add");
			var addedCategories = $("#cat-listing");
			var addedCategoriesItems = $("#cat-listing li");
			var categoryStorage = $("#categories");
			var deleteButton = addedCategoriesItems.find("a.remove");
			var removeLabel = addedCategories.parent().find("h4");
			var labelId;
			
			if (addedCategoriesItems.length > 0) {
				removeLabel.show();
				var i = 0;
				while (addedCategoriesItems.eq(i).length > 0) {
					categoryArray.push({ "label": addedCategoriesItems.eq(i).find("span").text(), "id": addedCategoriesItems.eq(i).attr("data-categoryid") });
					i++;
				}
				categoryStorage.val(JSON.stringify(categoryArray));
			}
			
			button.click(function(event) {
				event.preventDefault();
				if (self.val().length > 0) {
					categoryArray.push({ "label": self.val(), "id": 0 });
					var newCategory = $("<li style='display: none;'><a class='remove'>Remove</a><span>" + self.val() + "</span></li>").appendTo(addedCategories).fadeIn();
					removeLabel.show();
					if ($.browser.msie) { // force layout in ie
						newCategory.height();
					}
					categoryStorage.val(JSON.stringify(categoryArray));
					self.val("");
					
					newCategory.find("a.remove").click(function(event) {
						event.preventDefault();
						var i = 0;
						while ($(this).parents("li").prevAll().eq(i).length > 0) {
							i++;
						}
						categoryArray.splice(i,1);
						$(this).parents("li").fadeOut().remove();
						if (categoryArray.length == 0) {
							removeLabel.fadeOut();
						}
						categoryStorage.val(JSON.stringify(categoryArray));
					});
				}
			});
			
			var bindDeleteButton = function() {
				deleteButton.click(function(event) {
					event.preventDefault();
					var i = 0;
					while ($(this).parents("li").prevAll().eq(i).length > 0) {
						i++;
					}
					categoryArray.splice(i,1);
					$(this).parents("li").fadeOut().remove();
					if (categoryArray.length == 0) {
						removeLabel.fadeOut();
					}
					categoryStorage.val(JSON.stringify(categoryArray));
				});
			}
			bindDeleteButton();
		});
		
		outfitUpload();
		flowController();
		
		$("#outfitpost-wrapper div.unit .del-s").click( function() {
			deleteOutfitPhoto(this);
		});
		
		$("#main-image img").each(function() { initTagging(this); });
		$("#outfitpost-wrapper div.additional-images div.unit").click(function(event) {
			event.preventDefault();
			imageSwitch(this);
		});
		$("#main-image img").writeTags({ editMode: true });
		if ("undefined" !== typeof blogTags) {
			$("#category").autocomplete(blogTags);
		}
		$("#title").clearingInput();
		
		$('#createBlog').remote({ formPost: true, responseType: "json", rePostable: true } , function(data) {
			if (data.success === true) {
				window.location.href = window.location.href + "?blogName=" + $("#newBlogName").val() + "&blogCreated=1";
			} else if (data.success === false) {
				if ($(this.lastChild).hasClass("notice")) { $(this.lastChild).remove(); }
				$("<div/>").addClass("notice error").html("<p>" + data.response.join("</p><p>") + "</p>")
					.appendTo(this);
			}
		});
		$("#tagInfo li a.cross").click(function() {
			removeTag($(this).attr("data-imageid"),$(this).attr("data-tagid"));
		});
	});
	doc.ready(uploadImage);

	//win.one("beforeunload", creator.destroy);
})(jQuery);
