
var util={popup:function(url,w,h,params){var id='popupWin';var w=w||screen.availWidth*.8;var h=h||screen.availHeight*.7;var params=params||'toolbar=0, scrollbars=1, location=0, statusbar=0, menubar=0, resizable=1';var win=window.open(url,id,params+', width='+w+', height='+h+', left='+(screen.availWidth/2-w/2)+', top='+(screen.availHeight/2-h/2));},has_class:function(ele,cls){return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));},add_class:function(ele,cls){if(!this.has_class(ele,cls))ele.className+=" "+cls;},remove_class:function(ele,cls){if(this.has_class(ele,cls)){var reg=new RegExp('(\\s|^)'+cls+'(\\s|$)');ele.className=ele.className.replace(reg,' ');}},add_event:function(obj,type,fn){if(obj.attachEvent){obj['e'+type+fn]=fn;obj[type+fn]=function(){obj['e'+type+fn](window.event);}
obj.attachEvent('on'+type,obj[type+fn]);}else{obj.addEventListener(type,fn,false);}},remove_event:function(obj,type,fn){if(obj.detachEvent){obj.detachEvent('on'+type,obj[type+fn]);obj[type+fn]=null;}else{obj.removeEventListener(type,fn,false);}},ucwords:function(val){val=val.split(' ');newVal='';for(var i=0;i<val.length;i++){newVal+=val[i].substring(0,1).toUpperCase()+val[i].substring(1,val[i].length)+' ';}
return newVal;},scroll_to:function(id){var el=document.getElementById(id);var curleft=0;var curtop=0;do{curleft+=el.offsetLeft;curtop+=el.offsetTop;}while(el=el.offsetParent);window.scrollTo(curleft,curtop);}}
try{document.execCommand('BackgroundImageCache',false,true);}catch(ignoreme){}
tooltips={x_offset:integer=-2,y_offset:integer=15,init:function(){var objBody=document.getElementsByTagName("body")[0];var objContainer=document.createElement('div');objContainer.setAttribute('id','tooltip');objContainer.innerHTML="&nbsp;";objBody.appendChild(objContainer);var objTag=document.getElementsByTagName('a');var objTagLength=objTag.length;for(i=0;i<objTagLength;i++){if(objTag[i].title){objTag[i].onmouseover=this.showNote;objTag[i].onmousemove=this.moveNote;objTag[i].onmouseout=this.hideNote;}}},getScroll:function(){if(document.body.scrollTop!=undefined){var ieBox=document.compatMode!="CSS1Compat";var cont=ieBox?document.body:document.documentElement;return{x:cont.scrollLeft,y:cont.scrollTop};}else{return{x:window.pageXOffset,y:window.pageYOffset};}},showNote:function(e){var objEvent=e?e:event;var objTip=document.getElementById('tooltip');var scroll=tooltips.getScroll();objTip.innerHTML=this.title;this.title='';tooltips.moveNote;objTip.style.visibility=(objTip.innerHTML=='')?'hidden':'visible';},hideNote:function(e){this.title=document.getElementById('tooltip').innerHTML;document.getElementById('tooltip').style.visibility='hidden';},moveNote:function(e){var objEvent=e?e:event;var objTip=document.getElementById('tooltip');var scroll=tooltips.getScroll();var dw=document.width?document.width:document.documentElement.offsetWidth;if(objEvent.clientX>dw-objTip.offsetWidth){objTip.style.left=dw-objTip.offsetWidth+scroll.x+"px";}else{objTip.style.left=objEvent.clientX+tooltips.x_offset+scroll.x+"px";objTip.style.top=objEvent.clientY+tooltips.y_offset+scroll.y+"px";}}}
var form={"validationJson":{},waiting_img:string='http://img.bulgarianpropertiesdb.com/admin/waiting_small.gif',bind:function(form_id,validationJson){this.validationJson[form_id]=validationJson;validationJson=null;var imgPreload=new Image()
imgPreload.src=this.waiting_img;for(var field_name in this.validationJson[form_id].fields){var field_object=document.getElementById(field_name);if(field_object&&typeof(field_object)=='object'){field_object.hint_message='';util.add_event(field_object,'focus',this.show_hint);util.add_event(field_object,'blur',this.hide_tooltip);for(validations in this.validationJson[form_id].fields[field_name]){var curr_child=this.validationJson[form_id].fields[field_name][validations];if(curr_child.message){field_object.hint_message+=this.message_substitutes(curr_child.message,curr_child.name,field_object.value,curr_child.requirement)+'<br>';}}}}},validate:function(form_obj){var form_id=form_obj.id;var errors_found=false;for(var field_name in this.validationJson[form_id].fields){var field_object=document.getElementById(field_name);if(field_object&&typeof(field_object)=='object'){if(!this.validate_single_field(form_id,field_object))
errors_found=true;}}
errors_found?this.validation_error(form_id):this.validation_success(form_obj);},validate_single_field:function(form_id,field_object){this.output_message("");var fval=field_object.value;var fid=field_object.id;var parent_child=this.validationJson[form_id].fields[fid];if(!this.validate_required(form_id,fval)&&parent_child.optional){this.clear_error(field_object);return true;}
var error_stack='';for(validations in this.validationJson[form_id].fields[fid]){var curr_child=parent_child[validations];if(curr_child){switch(validations){case'required':case'email':case'integer':case'float':if(!this['validate_'+validations](form_id,fval))
error_stack+=this.message_substitutes(curr_child.error,curr_child.name,field_object.value,curr_child.requirement)+'<br>';break;case'custom':case'minLength':case'maxLength':case'minValue':case'maxValue':if(!this['validate_'+validations](fval,curr_child.requirement))
error_stack+=this.message_substitutes(curr_child.error,curr_child.name,field_object.value,curr_child.requirement)+'<br>';break;}}}
if(error_stack){this.show_error(field_object,error_stack);return false;}else{this.clear_error(field_object);return true;}},highlights:function(form_id){form_obj=document.getElementById(form_id);for(var p=0;p<form_obj.length;p++){if(form_obj[p].type=="submit"||form_obj[p].type=="reset"||form_obj[p].type=="text"||form_obj[p].type=="password"||form_obj[p].type=="file"||form_obj[p].type=="textarea"||form_obj[p].type=="select-one"||form_obj[p].type=="select-multiple"||form_obj[p].type=="radio"||form_obj[p].type=="checkbox"){util.add_event(form_obj[p],'focus',this.field_highlight);util.add_event(form_obj[p],'blur',this.field_unhighlight);}}},field_highlight:function(){util.add_class(this,'focused');},field_unhighlight:function(){util.remove_class(this,'focused');},hide_tooltip:function(){form.hide_message(this.id);},hide_message:function(oid){var tooltip=document.getElementById(oid+'_msg');if(tooltip)tooltip.style.display='none';},show_hint:function(){form.show_message(this.id,this.hint_message,'succ');},validate_field:function(){var form_id=this.form.id;form.validate_single_field(form_id,this);},show_error:function(obj,msg){form.show_message(obj.id,msg,'err');util.add_class(obj,'warn');util.add_event(obj,'blur',this.validate_field);},clear_error:function(obj){util.remove_class(obj,'warn');util.add_event(obj,'blur',this.hide_tooltip);this.hide_message(obj.id)},validation_success:function(form_obj){this.output_message('<b><img src="'+this.waiting_img+'" /> '+this.validationJson[form_obj.id].message.FORM_SENDING+'</b>');document.getElementsByTagName('body')[0].style.cursor='wait';form_obj.submit();for(var p=0;p<form_obj.length;p++){if(form_obj[p].type=="submit"||form_obj[p].type=="reset"||form_obj[p].type=="text"||form_obj[p].type=="password"||form_obj[p].type=="file"||form_obj[p].type=="textarea"||form_obj[p].type=="select-one"||form_obj[p].type=="select-multiple"||form_obj[p].type=="radio"||form_obj[p].type=="checkbox"){form_obj[p].style.cursor='not-allowed';util.add_class(form_obj[p],'disabled');}}},validation_error:function(form_id){this.output_message("<span class='err'><b>"+this.validationJson[form_id].message.FORM_ERROR+"</b></span>");},validate_required:function(form_id,val){var reg=this.validationJson[form_id].regex.empty;reg=new RegExp(reg);return!reg.test(val);},validate_email:function(form_id,val){var reg=this.validationJson[form_id].regex.email;reg=new RegExp(reg);return reg.test(val);},validate_integer:function(form_id,val){var reg=this.validationJson[form_id].regex.integer;reg=new RegExp(reg);return reg.test(val);},validate_float:function(form_id,val){var reg=this.validationJson[form_id].regex.float;reg=new RegExp(reg);return reg.test(val);},validate_custom:function(val,req){reg=new RegExp(req);return reg.test(val);},validate_minLength:function(val,req){return val.length>=req;},validate_maxLength:function(val,req){return val.length<=req;},validate_minValue:function(val,req){return val>=req;},validate_maxValue:function(val,req){return val<=req;},output_message:function(msg){var output_container=document.getElementById("form_output");if(output_container){output_container.innerHTML=msg;}else{alert(msg);}},show_message:function(oid,msg,msg_class){var field_object=document.getElementById(oid);var msgTooltip=document.getElementById(oid+'_msg');var msgHtml="<div><b class='rnd'></b><b></b><b></b></div><div class='msgBoxText'><span class='"+msg_class+"'>"+msg+"</span></div><div><b></b><b></b><b class='rnd'></b></div>";if(msgTooltip){msgTooltip.innerHTML=msgHtml;msgTooltip.style.display='inline';}else{var msgNode=document.createElement('div');msgNode.id=oid+'_msg';msgNode.innerHTML=msgHtml;msgNode.className='msgBox';field_object.offsetParent.appendChild(msgNode);msgTooltip=msgNode;}},message_substitutes:function(message,field_name,field_value,field_requirement){field_name=util.ucwords(field_name.replace('_',' '));var field_length=field_value?field_value.length:0;message=message.replace('%field%',field_name);message=message.replace('%value%',field_value);message=message.replace('%length%',field_length);message=message.replace('%requirement%',field_requirement);return message;}}