/*
 * Copyright (C) 2008 Paul Uithol, SMARTposition <http://www.smartposition.nl>
 *
 */
SmartPosition.Util=function(){};
SmartPosition.Util={sortBy:{property:"",direction:"desc"},sortObjectArrayByProperty:function(e,d){var c=0;
for(var f in SmartPosition.Util.sortBy.property){e=e&&e[SmartPosition.Util.sortBy.property[f]];
d=d&&d[SmartPosition.Util.sortBy.property[f]];
}c=(e<d)?1:-1;
c=(SmartPosition.Util.sortBy.direction=="asc")?c*-1:c;
if(!e||e==""){c=1;
}if(!d||d==""){c=-1;
}if(e==d){c=0;
}return c;
},createIcon:function(a,b){if(!a){return null;
}var d={};
var c=/\{color\}/gi;
d.color=b?b:(a.icon&&a.icon.color)||"ffffff";
d.image=a.icon.image.replace(c,b);
if(a.icon.size){d.size=a.icon.size;
}if(a.icon.blink){d.blinkImage=a.icon.blink.replace(c,b);
}if(a.icon.off){d.offImage=a.icon.off.replace(c,b);
}if(a.shadow&&a.shadow.image){d.shadowImage=a.shadow.image.replace(c,b);
if(a.shadow.size&&a.shadow.size.length==2){d.shadowSize=a.shadow.size;
}}return d;
}};
(function(a){a.imageSelect={};
a.imageSelect.defaults={extraWidth:0,selectedOptionClass:"selected"};
a.fn.imageSelect=function(b){var b=a.extend({},a.imageSelect.defaults,b);
return this.each(function(){var f=a(this);
var e=f.find("div.list");
var d=f.find("div.mask");
var c=f.find("select");
e.add(d).width(c.width()+parseInt(b.extraWidth));
if(c.val()){e.find("a[href="+c.val()+"]").addClass(b.selectedOptionClass);
}e.click(function(h){h.preventDefault();
var g=a(h.target).closest("a");
if(g.attr("href")){c.val(g.attr("href")).trigger("change");
}e.hide();
});
c.change(function(g){e.find("a[href="+c.val()+"]").addClass(b.selectedOptionClass).siblings().removeClass(b.selectedOptionClass);
});
d.click(function(g){if(e.is(":visible")){e.hide();
}else{e.show();
}a(document).bind("click",function(h){if(h.target!==d[0]){e.hide();
a(document).unbind("click",arguments.callee);
}});
return true;
});
});
};
})(jQuery);
(function(a){a.flyoutDescription={};
a.flyoutDescription.defaults={containingElement:"li",inputFocusClass:"focus"};
a.fn.flyoutDescription=function(b){var b=a.extend({},a.flyoutDescription.defaults,b);
return this.each(function(){var c=a(this);
a("input, select",c).focus(function(){var d=a(this).addClass(b.inputFocusClass).closest(b.containingElement).find("div.description");
if(d.is(":hidden")){d.fadeIn("normal");
}});
a("input,select",c).blur(function(){var d=a(this).removeClass(b.inputFocusClass).closest(b.containingElement).find("div.description");
if(d.is(":visible")){d.fadeOut("normal");
}});
});
};
})(jQuery);
(function(a){var b={instance:null};
a.globalLoadingNotification={options:{},show:function(){if(!b.instance){b.instance=a("<div/><div/>").appendTo(document.body).css({borderWidth:0,margin:0,padding:0,position:"absolute",top:0,left:0,width:a(document).width(),height:a(document).height(),zIndex:1000}).eq(0).addClass("global-loading-overlay").css({backgroundColor:"#ccc",opacity:0.5}).end().eq(1).addClass("global-loading-indicator").end().show();
if(a.browser.msie){var c=b.instance.eq(0);
c.css("opacity")&&c.css("filter","alpha(opacity="+c.css("opacity")+")");
}a(window).bind("resize.globalLoadingNotification",a.globalLoadingNotification.resize);
}else{b.instance.show();
}},hide:function(){b.instance&&b.instance.hide();
},isVisible:function(){return b.instance&&b.instance.is(":visible");
},resize:function(){b.instance.css({width:0,height:0}).css({width:a(document).width(),height:a(document).height()});
}};
})(jQuery);
(function(b){var a={submitAll:false,errorCount:0,submittedForms:0,reportedForms:0,errorForms:0,submitCallback:null,updateResult:function(c){if(!a.submitAll){return;
}if(c&&c.length){a.errorForms++;
a.errorCount+=c.length;
}a.reportedForms++;
a.checkIfDone();
},checkIfDone:function(){if(b.isFunction(a.callback)&&a.reportedForms==a.submittedForms){a.callback(a.errorCount);
a.callback=null;
a.submitAll=false;
}},start:function(c,d){a.submitAll=true;
a.errorCount=0;
a.errorForms=0;
a.reportedForms=0;
a.submittedForms=c;
a.callback=d;
}};
findByName=function(d,c){return b(document.getElementsByName(c)).map(function(e,f){return f.form==d&&f.name==c&&f||null;
});
};
b.validatedAjaxForm={clientValidationCallback:function(g,e,d){var n=e.data("validatedAjaxFormOptions");
var h=[],l,k,j,m;
if(b.isFunction(n.preSubmit)){n.preSubmit(g,e);
}if(n.clientValidation){for(var f in g){l=n.clientValidation[g[f].name];
j=false;
if(l){for(var c in l){if(c!=="message"){j=j||!b.validatedAjaxForm.methods[c](e,g[f].name,b.trim(g[f].value),l[c]);
}}if(j){h.push({name:g[f].name,message:l.message});
}}}}b.validatedAjaxForm.showFormErrors(e,h);
if(!h.length){e.addClass(n.formSubmittingClass).find("button[type=submit],input[type=submit]").attr("disabled","disabled");
if(b.isFunction(n.clientValidationSuccess)){n.clientValidationSuccess(g,e);
}}else{a.updateResult(h);
if(b.isFunction(n.clientValidationFailed)){n.clientValidationFailed(g,e,h);
}if(b.isFunction(n.postSubmit)){n.postSubmit(false,e);
}}return !h.length;
},serverValidationCallback:function(d,c,g){var e=g.data("validatedAjaxFormOptions");
g.removeClass(e.formSubmittingClass).find("button[type=submit],input[type=submit]").removeAttr("disabled");
var h=d[e.updateObject];
for(var f in h){g.find('[name="'+h[f].name+'"]').val(h[f].value);
}if(d[e.errorObject]&&d[e.errorObject].length){b.validatedAjaxForm.showFormErrors(g,d[e.errorObject]);
if(b.isFunction(e.serverValidationFailed)){e.serverValidationFailed(d,g,d[e.errorObject]);
}if(b.isFunction(e.postSubmit)){e.postSubmit(false,g);
}}else{b.validatedAjaxForm.clearFormErrors(g);
e.modified=false;
g.data("validatedAjaxFormOptions",e);
if(b.isFunction(e.serverValidationSuccess)){e.serverValidationSuccess(d,g,d[e.updateObject]);
}if(b.isFunction(e.postSubmit)){e.postSubmit(true,g);
}}a.updateResult(d[e.errorObject]);
return true;
},serverError:function(c,g){var e=g.data("validatedAjaxFormOptions");
g.removeClass(e.formSubmittingClass).find("button[type=submit],input[type=submit]").removeAttr("disabled");
var d=[{name:"",message:"Error submitting form: "+c}];
b.validatedAjaxForm.showFormErrors(g,d);
if(b.isFunction(e.serverValidationFailed)){var f=e.errorObject;
e.serverValidationFailed({errorObject:d},g,d);
}if(b.isFunction(e.postSubmit)){e.postSubmit(false,g);
}},showFormErrors:function(f,h){b.validatedAjaxForm.clearFormErrors(f);
var d=f.data("validatedAjaxFormOptions");
if(h.length){var g=b(d.target).show().append("<ul></ul>").find("ul");
for(var e in h){if(h[e].message){g.append("<li>"+h[e].message+"</li>");
}var c=f.find('[name="'+h[e].name+'"]').addClass(d.inputErrorClass);
if(e==0&&c){c.focus();
}}}},clearFormErrors:function(d){var c=d.data("validatedAjaxFormOptions");
b(d.data("validatedAjaxFormOptions").target).hide().find("ul").remove();
d.find(":input."+c.inputErrorClass).removeClass(c.inputErrorClass);
},removeValidation:function(d){var c=d.data("validatedAjaxFormOptions");
c.clientValidation=[];
d.data("validatedAjaxFormOptions",c);
},submitAll:function(d,c){if(!c){c=b("form");
}a.start(c.length,d);
c.each(function(){var f=b(this);
var e=f.data("validatedAjaxFormOptions");
if(e&&e.modified===true){f.submit();
}else{a.submittedForms--;
}});
a.checkIfDone();
}};
b.validatedAjaxForm.defaults={dataType:"json",errorObject:"errors",updateObject:"updates",target:"div.error",formSubmittingClass:"submitting",inputErrorClass:"error",modified:false,preSubmit:null,clientValidation:{},clientValidationSuccess:null,clientValidationFailed:null,serverValidationSuccess:null,serverValidationFailed:null,postSubmit:null,beforeSubmit:b.validatedAjaxForm.clientValidationCallback,success:b.validatedAjaxForm.serverValidationCallback,error:b.validatedAjaxForm.serverError};
b.validatedAjaxForm.methods={required:function(d,c,e,f){return e.length;
},matches:function(d,c,e,f){return e===b(f).val();
},digitlength:function(d,c,e,f){return e.replace(/[^\d]/g,"").length===f;
},length:function(d,c,e,f){return e.length===f;
},maxlength:function(d,c,e,f){return e.length<=f;
},minlength:function(d,c,e,f){return e.length>=f;
}};
b.fn.extend({validatedAjaxForm:function(c){if(!this.length){console.debug("[ValidatedAjaxForm] No element selected");
return this;
}var c=b.extend({},b.validatedAjaxForm.defaults,c);
b(this).find("input,select").change(function(d){b(this).removeClass(c.inputErrorClass);
b(this).parents("form").data("validatedAjaxFormOptions").modified=true;
});
return this.each(function(){var d=b(this);
d.data("validatedAjaxFormOptions",c);
d.ajaxForm(c);
SmartPosition.debug&&console.debug("[ValidatedAjaxForm] %o %o",d,c);
});
}});
})(jQuery);

