//checkbox
function focusHiddenInput(e){
	whi.add_class(this.parentNode,'checkbox_focused');
}
function blurHiddenInput(e){
	whi.remove_class(this.parentNode,'checkbox_focused');
}
function checkBoxClick(e){
	var eventSrc = whi.events.getSrcElement(e);
	if (this == eventSrc){
		this.relatedInput.checked = !this.relatedInput.checked;
		whi.events.fireEvent(this.relatedInput,'click')
		//putCheckClick.apply(this);
	        this.relatedInput.focus();
 	}
}
function checkInputClick(e){
	putCheckClick.apply(this.relatedCheckbox);
	return true;
}
function putCheckClick(){
	if (this.relatedInput.checked == true){
		whi.add_class(this,'checkbox_checked');
	}else{
		whi.remove_class(this,'checkbox_checked');
        }
}
function initDivCheckbox(){
	var inp = this.getElementsByTagName("input")[0];

	this.relatedInput = inp;
	this.relatedInput.relatedCheckbox = this;
	this.relatedInput.onfocus = focusHiddenInput;
	this.relatedInput.onblur = blurHiddenInput;

	this.onclick = checkBoxClick;
	//whi.events.addEvent(this.relatedInput,'click',count_imported_contacts);
	whi.events.addEvent(this.relatedInput,'click',checkInputClick);
//	this.relatedInput.onclick = checkInputClick;

	putCheckClick.apply(this);
}
jsRules.addRule("div.checkbox",initDivCheckbox);






//radio
var radioGroups = {};
function focusHiddenRadio(e){
	whi.add_class(this.parentNode,'radio_focused');
}
function blurHiddenRadio(e){
	whi.remove_class(this.parentNode,'radio_focused');
}
function radioClick(e){
	var eventSrc = whi.events.getSrcElement(e);
	if (this == eventSrc){
		if (!this.relatedInput.checked){
			if (!whi.has_class(this,'radio_disabled')){
				this.relatedInput.checked = true;
				whi.events.fireEvent(this.relatedInput,'click')
			}
		}
		if (!whi.has_class(this,'radio_disabled')){
	        	this.relatedInput.focus();
		}
 	}
}
function checkRadioInputClick(e){
	putRadioClick.apply(this.relatedRadio);
	return true;
}
function putRadioClick(){
	if (this.relatedInput.radioParentGroup.selectedRadio != this.relatedInput){
		if (!whi.has_class(this,'radio_disabled')){
			if (this.relatedInput.radioParentGroup.selectedRadio != null){
				whi.remove_class(this.relatedInput.radioParentGroup.selectedRadio.relatedRadio,'radio_checked');
			}
			whi.add_class(this.relatedInput.relatedRadio,'radio_checked');
	
			this.relatedInput.radioParentGroup.selectedRadio = this.relatedInput;
		}
	}
}
jsRules.addRule("div.radio",function(){
	var inp = this.getElementsByTagName("input")[0];
	if (inp.name){
		if (!radioGroups[inp.name]){
			radioGroups[inp.name] = {
				"selectedRadio" : inp.checked == true ? inp : null,
				elems : []
			};
		}
		inp.radioParentGroup = radioGroups[inp.name];
		if (inp.checked == true){
			inp.radioParentGroup.selectedRadio = inp;
		}else{
			whi.remove_class(this,'radio_checked');
		}

		radioGroups[inp.name].elems.push(inp);

		this.relatedInput = inp;
		this.relatedInput.relatedRadio = this;
		this.relatedInput.onfocus = focusHiddenRadio;
		this.relatedInput.onblur = blurHiddenRadio;

		whi.events.addEvent(this,'click',radioClick);
		whi.events.addEvent(this.relatedInput,'click',checkRadioInputClick);
	}
});










function add_friend_data(el){
	var a, fldset, label, div, td, inp, add_inp, strong, p, lnk, spn;
	var total_quizes = 0;
	var ind = 1;
	if (a = document.getElementById("total_quizes")){
		total_quizes = parseInt(a.value) |+ 0;
		a.value = ++total_quizes;
	}

	var fldset = document.createElement("div");
	fldset.className = "fieldset friend_fields";

	label = document.createElement("label");
	label.setAttribute("htmlFor","to_name"+total_quizes);
	label.innerHTML = "Nume prieten(a):";
	fldset.appendChild(label);

	inp = document.createElement("input");
	inp.type = "text";
	inp.name = "to_name[]";
	inp.id = "to_name"+total_quizes;
	inp.className = "text";
	fldset.appendChild(inp);

	div = document.createElement("div");
	div.className = "clear err";
	div.innerHTML = "&nbsp;";
	fldset.appendChild(div);
	
	
	
	
	
	label = document.createElement("label");
	label.setAttribute("htmlFor","to_email"+total_quizes);
	label.innerHTML = "Adresa e-mail:";
	fldset.appendChild(label);

	inp = document.createElement("input");
	inp.type = "text";
	inp.name = "to_email[]";
	inp.id = "to_email"+total_quizes;
	inp.className = "text";
	fldset.appendChild(inp);

	div = document.createElement("div");
	div.className = "clear err";
	div.innerHTML = "&nbsp;";
	fldset.appendChild(div);
	
	
	
	
	
	label = document.createElement("label");
	label.setAttribute("htmlFor","to_phone"+total_quizes);
	label.innerHTML = "Nr. telefon:";
	fldset.appendChild(label);

	inp = document.createElement("input");
	inp.type = "text";
	inp.name = "to_phone[]";
	inp.id = "to_phone"+total_quizes;
	inp.className = "text";
	fldset.appendChild(inp);

	div = document.createElement("div");
	div.className = "clear err";
	div.innerHTML = "&nbsp;";
	fldset.appendChild(div);
	
	
	
	
	lnk = document.createElement("a");
	lnk.href = "javascript:void(0);"
	lnk.className = "fright small_gray_button";
	lnk.onclick = delete_friend;
	fldset.appendChild(lnk);


	spn = document.createElement("span");
	spn.className = "button_left";
	lnk.appendChild(spn);

	spn = document.createElement("span");
	spn.className = "button_middle";
	spn.innerHTML = "Sterge";
	lnk.appendChild(spn);

	spn = document.createElement("span");
	spn.className = "button_right";
	lnk.appendChild(spn);


	


	div = document.createElement("div");
	div.className = "clear";
	div.innerHTML = "&nbsp;";
	fldset.appendChild(div);


	el.parentNode.insertBefore(fldset,el);
}




function delete_friend(e){
	this.parentNode.parentNode.removeChild(this.parentNode);
	return true;
}

jsRules.addRule("div.fieldset a.js_del_friend",function(){
	whi.events.addEvent(this,'click',delete_friend);
});



var selectedImportTab = null;
var selectedImportTabThumb = null;
var selectedImportTabId = '';

function selectImporTab(e){
	if (!this.id) return;
	var tab_id = this.id.replace("import_","");
	tab_id = tab_id.replace("small_","");
	var oth_thumb_id = tab_id+'_logo';
	var a;
	if (a = document.getElementById('tab_import_'+tab_id)){
		if (a != selectedImportTab){

			selectedImportTabId = tab_id;

			selectedImportTab.style.display = "none";
			if (selectedImportTabThumb){
				selectedImportTabThumb.style.display = "none";
			}
                        selectedImportTab = a;
			selectedImportTabThumb = document.getElementById('import_'+oth_thumb_id);
			selectedImportTab.style.display = "";
			if (selectedImportTabThumb){
				selectedImportTabThumb.style.display = "";
			}
			
			document.getElementById('last_selected_tab').value = tab_id;
		}
	}
}

jsRules.addRule("a.js_select_import_tab",function(){
	whi.events.addEvent(this,'click',selectImporTab);
});

jsRules.addRule("#import_form .import_tab",function(){
	var st = this.style.display;
	if (st != 'none'){
		selectedImportTab = this;
		selectedImportTabId = this.id.replace('tab_import_','');

		var a;
		if (a = document.getElementById('import_'+selectedImportTabId+'_logo')){
			selectedImportTabThumb = a;
		}
	}
});

var ajax;
var import_type;
var lastShowenList = null;

function putListLoading(st){
	var lists = ["gmail","yahoo"];
	var a;
	if (st != "hide"){
		for (var i=0; i<lists.length; i++){
			if (a = document.getElementById('tab_import_'+lists[i])){
				if (a.style.display != 'none'){
					lastShowenList = a;
				}
				a.style.display = "none";
			}
		}
	}else{
		lastShowenList.style.display = "";
	}
	if (a = document.getElementById('list_loading')){
		a.style.display = st == "hide" ? "none" : "";
	}
}

function get_mail_contacts(e){
	try{
		import_type = this.parentNode.parentNode.id.replace('tab_import_','');
		var user = document.getElementById('import_'+import_type+'_mail').value;
		var pass = document.getElementById('import_'+import_type+'_pass').value;
		if (user && pass){
			ajax = new sack();
			ajax.requestFile = "/wp-content/plugins/quiz/import/import.php?import_type="+import_type+"&user="+user+"&pass="+pass;
			ajax.onCompletion = put_imported_contacts;
			ajax.runAJAX();
			putListLoading();
		}else{
			var err = document.getElementById('err_login_'+import_type);
			err.innerHTML = "Introduceti userul si parola!";
		}
	}catch(e){
        }
}

function put_imported_contacts(){
	var destroyObject = false;
	var emptyXML = true;
	var contactsContainer = document.getElementById('import_'+import_type+'_contact');
	var contactsContainerList = document.getElementById('import_'+import_type+'_contact_list');
	var err = document.getElementById('err_login_'+import_type);
	if (contactsContainerList){
		contactsContainerList.innerHTML = "";
		if (ajax.responseXML){
			var xml;
			if (document.implementation && document.implementation.createDocument){
				xml = ajax.responseXML;
			}else if (window.ActiveXObject){
				var xml = document.createElement("xml");
				xml.innerHTML = ajax.response;
				document.appendChild(xml);

				destroyObject = true;
			}else{
				return;
			}
			var items = xml.getElementsByTagName("item");
			
			if (items.length>0){
				emptyXML = false;
				for (var i=0; i<items.length; i++){
					var nodes = items[i].childNodes;
					var contact = {};
					for (var j=0; j<nodes.length; j++){
						if (nodes[j].nodeName != "#text"){
							contact[nodes[j].nodeName] = nodes[j].getAttribute("value");
						}
					}
					var lin_mail = contact["email"].replace(/[^a-zA-Z0-9]+/g,'_');
					var newContact = document.createElement("div");
					newContact.className = "list_contact";

					var check = document.createElement("div");
					check.className = "checkbox fleft";
					newContact.appendChild(check);

					var inp = document.createElement("input");
					inp.type = "checkbox";
					inp.checked = false;
					inp.name = import_type+"_send_to_emails["+lin_mail+"]";
					inp.id = import_type+"_send_to_email_"+lin_mail;
					inp.value = 1;
					check.appendChild(inp);
					
					var inp = document.createElement("input");
					inp.type = "hidden";
					inp.name = import_type+"_posted_to_emails["+lin_mail+"]";
					inp.value = contact["email"];
					check.appendChild(inp);

					var inp = document.createElement("input");
					inp.type = "hidden";
					inp.name = import_type+"_posted_to_names["+lin_mail+"]";
					inp.value = contact["name"];
					check.appendChild(inp);

					var label = document.createElement("label");
					label.htmlFor = import_type+"_send_to_email_"+lin_mail;
					label.innerHTML = contact["name"]+" &lt;"+contact["email"]+"&gt;";
					newContact.appendChild(label);
					
					var clr = document.createElement("div");
					clr.className = "clear_both";
					newContact.appendChild(clr);

					contactsContainerList.appendChild(newContact);

					initDivCheckbox.apply(check);
				}
			}
			if (destroyObject == true){
				if (xml.parentNode != null){
					xml.parentNode.removeChild(xml);
				}
				delete(xml);
			}
		}
	}
	if (emptyXML == false){
		var a;
		if (a = document.getElementById('import_'+import_type+'_form')){
			a.style.display = "none";
			//contactsContainerList.style.display = "";
			contactsContainer.style.display = "";
		}
		if (err){
			err.innerHTML = " ";
		}
	}else{
		if (err){
			err.innerHTML = "User sau parola incorecta!";
		}
	}
	putListLoading("hide");
}


function count_imported_contacts(e){
	var a;
	var totalImported = 0;
	if (a = document.getElementById("total_imported")){
		totalImported = parseInt(a.value) || 0;
		 if (this.checked == true){
			totalImported++;
		}else{
			totalImported--;
		}
		if (totalImported<=0) totalImported = 0;
		a.value = totalImported;

		if (a = document.getElementById("show_total_imported")){
			a.innerHTML = totalImported;
		}
	}
	if (a = document.getElementById('text_total_contacts')){
		a.style.display = totalImported > 0 ? '' : 'none';
	}
}


jsRules.addRule("a.js_import_contacts",function(){
	whi.events.addEvent(this,'click',get_mail_contacts);
});



function import_on_enter(e){
	var targ = whi.events.getSrcElement(e);
	if (targ == this || (targ.tagName.toLowerCase() == 'input')){
		var keycode;
		if (window.event) keycode = window.event.keyCode;
		else if (e) keycode = e.which;
		else return true;

		if (keycode == 13){
			var lnks = this.getElementsByTagName("a");
			if (lnks.length > 0){
				get_mail_contacts.apply(lnks[lnks.length-1]);
			}
		}
	}
}

jsRules.addRule("#import_form div.js_import_container",function(){
	whi.events.addEvent(this,'keypress',import_on_enter);
});







var ajax;

function check_mail_already(e){
	ajax = new sack();
	ajax.requestFile = "/quiz/?action=check_mail&mail="+this.value;
	ajax.onCompletion = put_mail_already;
	ajax.runAJAX();

	gotoId('bform');

	putFormLoading();
}

function gotoId(id){
	if (id){
		var empty_href = window.location.href.replace(/(#.*)$/,'');
		window.location.href = empty_href+"#"+id;
	}
}

function put_mail_already(){
	if (ajax.response){
		
		var ret_arr = {};
		try{
			var ret_arr = unserialize(ajax.response.toString());
		}catch(e){}

		putFormLoading("hide", ajax.response);
		
		if (ret_arr){
			var resp = parseInt(ret_arr.setup.id_setup) || 0;
	                if (resp >0){
				var a;
				if (a = document.getElementById('u_name')){
					a.value = ret_arr.setup.setup_user_name || "";
				}
				if (a = document.getElementById('u_phone')){
					a.value = ret_arr.setup.setup_user_phone || "";
				}
				if (a = document.getElementById('u_added_to_news')){
					var chk = parseInt(ret_arr.setup.news_subscribed) || 0;
					a.checked = chk > 0 ? true : false;
				}
				if (ret_arr.questions){
					for (key in ret_arr.questions){
						if (!Object.prototype[key]){
							if (a = document.getElementById("answer_"+key)){
								a.checked = true;
								putRadioClick.apply(a.relatedRadio);
								disableRadios(a);
							}
						}
					}
				}
				alert("Ai completat deja acest chestionar cand ai trimis o alta invitatie.\nAcestea sunt raspunsurile tale.");
			}else{
				inps = document.getElementById('quiz_form').getElementsByTagName("input");
				for (var i=0; i<inps.length; i++){
					if (inps[i].type == 'radio'){
						disableRadios(inps[i], false);
					}
				}
			}
			document.getElementById('already_mail').value = resp > 0 ? 1 : 0;
		}
	}
}

function disableRadios(el, disable){
	if (typeof disable == "undefined") var disable = true;
	if (disable == el.readonly) return;

	var par = el.parentNode;
	var cr_par = null;
	while (par){
		if (par.nodeType == 1){
			if (whi.has_class(par,'quiz_values')){
				cr_par = par;
				break;
			}
		}else{
			break;
		}
		par = par.parentNode;
	}
	if (cr_par){
		var inps = cr_par.getElementsByTagName("input");
		if (inps.length){
			for (var i=0; i<inps.length; i++){
				inps[i].readonly = disable;
				if (disable == true){
					whi.add_class(inps[i].relatedRadio,'radio_disabled');
				}else{
					whi.remove_class(inps[i].relatedRadio,'radio_disabled');
				}
			}
		}
	}
}

function putFormLoading(st, mail_ok){
	var a;
	if (a = document.getElementById('friends_form')){
		if (st != "hide"){
			a.style.display = "none";
		}else{
			a.style.display = "";
		}
	}
	if (a = document.getElementById('form_submit_button')){
		a.style.display = st == "hide" ? "" : "none";
	}
	if (a = document.getElementById('form_loading')){
		a.style.display = st == "hide" ? "none" : "";
	}
}

jsRules.addRule("input.js_check_mail_already",function(){
	whi.events.addEvent(this,'change',check_mail_already);
});

/* jsRules.addRule("form.js_quiz_form",function(){
	this.onsubmit = function(){
		var a;
		if (a = document.getElementById('submit_mail_ok')){
			var val = parseInt(a.value) || 0;
			if (val == 0){
				return false;
			}
		}
		return true;
	}
}); */





function unserialize(data){
    // http://kevin.vanzonneveld.net
    // +     original by: Arpad Ray (mailto:arpad@php.net)
    // +     improved by: Pedro Tainha (http://www.pedrotainha.com)
    // +     bugfixed by: dptr1988
    // +      revised by: d3x
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // %            note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %            note: Aiming for PHP-compatibility, we have to translate objects to arrays 
    // *       example 1: unserialize('a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}');
    // *       returns 1: ['Kevin', 'van', 'Zonneveld']
    // *       example 2: unserialize('a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}');
    // *       returns 2: {firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'}
    
    var error = function (type, msg, filename, line){throw new window[type](msg, filename, line);};
    var read_until = function (data, offset, stopchr){
        var buf = [];
        var chr = data.slice(offset, offset + 1);
        var i = 2;
        while(chr != stopchr){
            if((i+offset) > data.length){
                error('Error', 'Invalid');
            }
            buf.push(chr);
            chr = data.slice(offset + (i - 1),offset + i);
            i += 1;
        }
        return [buf.length, buf.join('')];
    };
    var read_chrs = function (data, offset, length){
        buf = [];
        for(var i = 0;i < length;i++){
            var chr = data.slice(offset + (i - 1),offset + i);
            buf.push(chr);
        }
        return [buf.length, buf.join('')];
    };
    var _unserialize = function (data, offset){
        if(!offset) offset = 0;
        var buf = [];
        var dtype = (data.slice(offset, offset + 1)).toLowerCase();
        
        var dataoffset = offset + 2;
        var typeconvert = new Function('x', 'return x');
        var chrs = 0;
        var datalength = 0;
        
        switch(dtype){
            case "i":
                typeconvert = new Function('x', 'return parseInt(x)');
                var readData = read_until(data, dataoffset, ';');
                var chrs = readData[0];
                var readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case "b":
                typeconvert = new Function('x', 'return (parseInt(x) == 1)');
                var readData = read_until(data, dataoffset, ';');
                var chrs = readData[0];
                var readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case "d":
                typeconvert = new Function('x', 'return parseFloat(x)');
                var readData = read_until(data, dataoffset, ';');
                var chrs = readData[0];
                var readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case "n":
                readdata = null;
            break;
            case "s":
                var ccount = read_until(data, dataoffset, ':');
                var chrs = ccount[0];
                var stringlength = ccount[1];
                dataoffset += chrs + 2;
                
                var readData = read_chrs(data, dataoffset+1, parseInt(stringlength));
                var chrs = readData[0];
                var readdata = readData[1];
                dataoffset += chrs + 2;
                if(chrs != parseInt(stringlength) && chrs != readdata.length){
                    error('SyntaxError', 'String length mismatch');
                }
            break;
            case "a":
                var readdata = {};
                
                var keyandchrs = read_until(data, dataoffset, ':');
                var chrs = keyandchrs[0];
                var keys = keyandchrs[1];
                dataoffset += chrs + 2;
                
                for(var i = 0;i < parseInt(keys);i++){
                    var kprops = _unserialize(data, dataoffset);
                    var kchrs = kprops[1];
                    var key = kprops[2];
                    dataoffset += kchrs;
                    
                    var vprops = _unserialize(data, dataoffset);
                    var vchrs = vprops[1];
                    var value = vprops[2];
                    dataoffset += vchrs;
                    
                    readdata[key] = value;
                }
                
                dataoffset += 1;
            break;
            default:
                error('SyntaxError', 'Unknown / Unhandled data type(s): ' + dtype);
            break;
        }
        return [dtype, dataoffset - offset, typeconvert(readdata)];
    };
    return _unserialize(data, 0)[2];
}


function goto_first_err(id){
	var sp = window.location.href;
	if (sp.indexOf('#')>0){
		sp = sp.replace(/\#.*/,'');
	}
	window.location.href = sp +'#'+id;
}

